English | 繁中版 | 简中版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Українська | Español | Italiano | 日本語 | Deutsch | Türkçe | Tiếng Việt | Монгол | हिंदी | العربية | Polski | Македонски | ລາວ
Контрольный список наиболее важных контрмер безопасности при разработке, тестировании и выпуске вашего API.
- Не используйте
Basic Auth
Используйте стандартную проверку подлинности (например: JWT, OAuth). - Не "изобретайте колесо" в
аутентификации
,создании токенов
,хранении паролей
. Используйте стандарты. - Используйте
Max Retry
и функции jail в Login. - Используйте шифрование для всех конфиденциальных данных.
- Используйте случайный сложный ключ (
JWT Secret
), чтобы сделать брут форс токена очень сложным. - Не извлекайте алгоритм из полезной нагрузки. Внесите алгоритм в бэкэнд (
HS256
илиRS256
). - Сделайте срок действия токена (
TTL
,RTTL
) как можно короче. - Не храните конфиденциальные данные в полезной нагрузке JWT, ее можно легко декодировать..
- Всегда проверяйте
redirect_uri
на стороне сервера, чтобы разрешать только URL-адреса с белыми списками. - Всегда старайтесь обменивать код, а не токены (не разрешать
response_type=token
). - Используйте параметр
состояния
со случайным хешем, чтобы предотвратить CSRF в процессе аутентификации OAuth. - Определите область по умолчанию и проверьте параметры области для каждого приложения.
- Ограничьте запросы (Throttling), чтобы избежать DDoS атак / грубой силы (Brute Force).
- Используйте HTTPS на стороне сервера, чтобы избежать MITM (Man In The Middle Attack / Атака посредника).
- Используйте заголовок
HSTS
(HTTP Strict Transport Security) с SSL, чтобы избежать атаки SSL Strip (перехват SSL соединений).
- Используйте соответствующий HTTP-метод в соответствии с операцией:
GET (чтение)
,POST (создание)
,PUT / PATCH (замена / обновление)
иDELETE (для удаления записи)
, а также ответьте405 Method Not Allowed
, если запрошенный метод не подходит для запрашиваемого ресурса. - Подтвердите
тип содержимого
по запросу "Принять заголовок" (Консолидация контента), чтобы разрешить только поддерживаемый формат (например,application/xml
,application/json
и т.д.) И отвечайте с недопустимым ответом 406, если он не согласован. - Проверяйте содержимое опубликованных данных
типа контента
по мере их принятия (например,application/x-www-form-urlencoded
,multipart/form-data
,application/json
и т.д.). - Проверьте пользовательский ввод во избежание распространенных уязвимостей (например:
XSS
,SQL-инъекций
,удаленное выполнение кода
и т.д.). - Не используйте конфиденциальные данные (
учетные данные
,пароли
,маркеры безопасности
илиключи API
) в URL-адресе, но используйте стандартный заголовок авторизации. - Используйте службу шлюза API, чтобы активировать кеширование, ограничение скорости, спайк-арест и динамическое развертывание ресурсов API.
- Проверьте, защищены ли все конечные точки за аутентификацией, чтобы не нарушить процедуру проверки подлинности.
- Следует избегать идентификатора пользователя собственного ресурса. Используйте
/me/orders
вместо/user/654321/orders
. - Не включайте автоинкремент для ID. Вместо этого используйте
UUID
. - Если вы разбираете XML-файлы, убедитесь, что синтаксический анализ сущностей не включен, чтобы избежать
атаки на внешний объект XML
(XML external entity). - Если вы разбираете XML-файлы, убедитесь, что расширение сущности не включено, чтобы избежать
Billion Laughs / XML bomb
с помощью экспоненциальной атаки расширения сущностей. - Используйте CDN для загрузки файлов.
- Если вы имеете дело с огромным количеством данных, используйте Workers and Queues, чтобы обрабатывать как можно больше в фоновом режиме и быстро возвращать ответ, чтобы избежать блокировки HTTP.
- Не забудьте выключить режим DEBUG.
- Отправляйте заголовок
X-Content-Type-Options: nosniff
. - Отправляйте заголовок
X-Frame-Options: deny
. - Отправляйте заголовок
Content-Security-Policy: default-src 'none'
. - Удалите заголовки отпечатков пальцев -
X-Powered-By
,Server
,X-AspNet-Version
и т.д. - Принудите
тип содержимого
для вашего ответа, если вы вернетеapplication/json
, тогда ваш тип содержимого ответа будетapplication/json
. - Не возвращайте конфиденциальные данные, такие как
учетные данные
,пароли
,токены безопасности
. - Возвращайте код состояния в соответствии с завершенной работой. (Например:
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
и т.д.).
- Аудит вашего дизайна и реализации с охватом модулей/интеграционных тестов.
- Используйте процесс проверки кода и игнорируйте самоокупаемость.
- Убедитесь, что все компоненты ваших служб статически сканируются с помощью антивирусов перед отправкой на производство, включая библиотеки поставщиков и другие зависимости.
- Создайте решение отката для развертывания.
- yosriady/api-development-tools - Сбор полезных ресурсов для создания RESTful HTTP+JSON API.
Не стесняйтесь вносить вклад, открывая этот репозиторий, внося некоторые изменения и отправляя Pull Requests
. По любым вопросам напишите нам письмо по адресу [email protected]
.