Секрет должен оставаться в доверенной части приложения, которая выполняет разрешённую операцию
Статьи
Проверяйте адрес назначения и сетевой доступ на стороне загрузчика
Считайте сгенерированный HTML недоверенным вводом
Предпочитайте узкие операции с фиксированными аргументами произвольной командной строке
Запрет записи защищает от части изменений базы, но не ограничивает чтение чужих строк и чувствительных столбцов
Опишите назначение, единицы измерения и опасные условия параметров, а критичные ограничения закрепите на сервере
Не используйте идентификатор сессии как единственное доказательство прав на бизнес-данные
Передавайте безопасный идентификатор трассировки между слоями и записывайте стадии операции
Считайте изменение обязательных полей и смысла ответа изменением контракта
Определяйте доступный tenant из доверенного контекста авторизации и проверяйте каждый объект на сервере
Проверяйте, для какого ресурса выдан токен, и не считайте один bearer token универсальным пропуском ко всем подключённым системам
Сокращайте ответ по бизнес-задаче: фильтруйте, ограничивайте поля и давайте управляемое продолжение
Сделайте выбор инструмента различимым по назначению и контексту сервера
Аннотация инструмента описывает его свойства для клиента, но не заменяет серверное ограничение полномочий
Обрабатывайте отмену как сигнал прекратить дальнейшую работу там, где это возможно
После таймаута исход операции может быть неизвестен
Различайте пагинацию каталога протокола и пагинацию бизнес-результата вашего инструмента
Выбирайте ресурс для адресуемого содержимого, а инструмент — для вызываемой операции с параметрами и явным результатом
В stdio-режиме оставьте stdout для сообщений протокола, а диагностические логи направьте в stderr
Определите различие между «не менять поле» и «очистить поле»
