Ниже приведены важные меры безопасности, которые необходимо проверить при разработке, тестировании и публикации API.
Аутентификация
- Не используй
Basic Auth
Используйте стандартные протоколы аутентификации (например, JWT, OAuth). - не воссоздавай
Authentication
,token generating
,password storing
Эти колеса, используйте стандартные. - использовать в логине
Max Retry
и функция автоматического запрета. - Шифруйте все конфиденциальные данные.
JWT (JSON Web Token)
- Используйте случайный сложный ключ (
JWT Secret
) для увеличения сложности взлома методом грубой силы. - Не извлекайте данные непосредственно в теле запроса, шифруйте данные (
HS256
илиRS256
). - Сделайте срок действия токена как можно короче (
TTL
,RTTL
). - Не храните конфиденциальные данные в теле запроса JWT, этовзламываемый.
Протокол авторизации или аутентификации OAuth
- Всегда проверяйте в фоновом режиме
redirect_uri
, разрешены только URL-адреса из белого списка. - Не добавляйте токен каждый раз при обмене токена (не разрешено
response_type=token
). - использовать
state
и заполните его случайным хешем, чтобы предотвратить подделку межсайтовых запросов (CSRF). - Определите область по умолчанию и соответствующие допустимые параметры области для различных приложений.
доступ
- Ограничьте трафик, чтобы предотвратить DDoS-атаки и атаки методом перебора.
- Используйте протокол HTTPS на сервере для предотвращения атак MITM.
- использовать
HSTS
Протокол для предотвращения атак SSLStrip.
входной фильтр
- использовать функцию действия HTTP, которая соответствует действию,
GET (读取)
,POST (创建)
,PUT (替换/更新)
а такжеDELETE (删除记录)
, возвращается, если запрошенный метод недоступен для запрошенного ресурса405 Method Not Allowed
. - в заголовке запроса
content-type
Поля используют проверку содержимого, чтобы разрешать только поддерживаемые форматы (например,application/xml
,application/json
и т. д.) и вернуться, если условие не выполнено406 Not Acceptable
. - проверять
content-type
Опубликованные данные совпадают с теми, что вы получили (например,application/x-www-form-urlencoded
,multipart/form-data
,application/json
и т.д). - Проверяйте вводимые пользователем данные, чтобы избежать распространенных уязвимостей, таких как
XSS
,SQL-注入
,远程代码执行
и т.д). - Не используйте конфиденциальные данные в URL-адресе (
credentials
,Passwords
,security tokens
, orAPI keys
), вместо этого используя стандартные заголовки проверки подлинности. - Используйте службу шлюза API для включения кэширования, ограничения скорости (например,
Quota
,Spike Arrest
,Concurrent Rate Limit
) и динамически развертывать ресурсы API.
иметь дело с
- Проверьте, все ли терминалы прошли аутентификацию, чтобы избежать поломки системы аутентификации.
- Избегайте использования уникальных идентификаторов ресурсов.
/me/orders
альтернатива/user/654321/orders
- использовать
UUID
Заменяет автоматически увеличивающийся идентификатор. - При анализе XML-файлов убедитесь, что анализ объектов отключен, чтобы избежать
XXE
атака. - При анализе XML-файлов убедитесь, что расширение сущности отключено, чтобы избежать экспоненциальных атак расширения сущности.
Billion Laughs/XML bomb
. - Используйте CDN для загрузки файлов.
- Если вам нужно обработать много данных, используйте Workers и 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
и Т. Д. - Обязательное использование в ответ
content-type
, если ваш типapplication/json
тогда твойcontent-type
этоapplication/json
. - Не возвращайте конфиденциальные данные, такие как
credentials
,Passwords
,security tokens
. - Возвращает соответствующий код состояния в конце операции (например,
200 OK
,400 Bad Request
,401 Unauthorized
,405 Method Not Allowed
и т.д).
Непрерывная интеграция и непрерывное развертывание
- Используйте модульные и интеграционные тесты для проверки дизайна и реализации.
- Внедрите процесс проверки кода, не одобряйте изменения самостоятельно.
- Убедитесь, что все компоненты службы статически проверены антивирусным программным обеспечением, включая сторонние библиотеки и другие зависимости, прежде чем запускать их в производство.
- Разработайте схему отката для развертывания.
Система разрешений (Регистрация/Регистрация/Вторичная проверка/Сброс пароля)
- Используйте HTTPS везде.
- использовать
Bcrypt
Хранить хэш пароля (не нужно использовать соль -Bcrypt
Это то, что он делает). -
登出
После этого уничтожьте идентификатор сеанса. - Уничтожить все активные сеансы после сброса пароля.
- Аутентификация OAuth2 должна содержать
state
параметр. - После успешного входа его нельзя напрямую перенаправить на открытый путь (требуется проверка, иначе он подвержен фишинговым атакам).
- Фильтровать javascript://, data:// и другие символы CRLF при разборе регистрации/входа пользователя.
- Используйте безопасные/httpOnly файлы cookie.
- Мобильное использование
OTP
При проверке, при звонкеgenerate OTP
илиResend OTP
OTP (одноразовый пароль) нельзя вернуть непосредственно в API. (обычно путем отправки SMS-сообщения с подтверждением на мобильный телефон, случайного кода электронной почты и т. д., а не прямого ответа) - Ограничить одного пользователя
Login
,Verify OTP
,Resend OTP
,generate OTP
Подождите количество вызовов API и используйте Captcha и другие средства, чтобы предотвратить взлом методом перебора. - Проверьте токен сброса пароля в электронном письме или SMS, чтобы убедиться в случайности (не угадывать)
- Установите срок действия токена сброса пароля.
- После успешного сброса пароля токен, использованный для сброса, станет недействительным.
Данные пользователя и проверка разрешений
- Такие как
我的购物车
,我的浏览历史
доступ к ресурсам, например, должен проверить, есть ли у вошедшего в систему пользователя права доступа к этим ресурсам. - Чтобы избежать непрерывного обхода идентификаторов ресурсов, используйте
/me/orders
заменять/user/37153/orders
На всякий случай, если вы забыли проверить разрешения и привести к утечке данных. -
修改邮箱/手机号码
Функция должна сначала подтвердить, что пользователь подтвердил, что почтовый ящик/мобильный телефон принадлежит ему. - Любая функция загрузки должна фильтровать имена файлов, загружаемых пользователем, и по соображениям общности (не из соображений безопасности) загрузки должны храниться в облачном хранилище, таком как S3 (с лямбда-обработкой), а не на собственном сервере, что предотвращает выполнение кода.
-
个人头像上传
функция должна фильтровать всеEXIF
ярлык, даже без этого требования. - Идентификатор пользователя или другой идентификатор, следует использоватьRFC compliant из
UUID
вместо целых чисел Вы можете найти реализацию на своем языке на github. - JWT (веб-токен JSON)Отлично. Используйте, когда вам нужно создать одностраничное приложение/API.
ПРИЛОЖЕНИЕ для Android и iOS
- Платежный шлюз
盐(salt)
не должно быть жестко запрограммировано - от третьих лиц
secret
иauth token
не должно быть жестко запрограммировано - API, которые вызываются между серверами, не должны вызываться из приложения.
- Под Android будьте осторожны, чтобы оценить все приложения дляразрешение
- В iOS используйте связку ключей системы для хранения конфиденциальной информации (токены разрешений, ключи API и т. д.).не хотетьСохраните эту информацию в конфигурации пользователя
- настоятельно рекомендуетсяЗакрепление сертификата
действовать
- Если у вас небольшой бизнес или у вас нет опыта, рассмотрите возможность использования AWS или платформы PaaS для запуска своего кода.
- Создавайте виртуальные машины в облаке с помощью формальных сценариев
- Убедитесь, что все машины не обязательно открыты
端口
- Проверьте, не установлен ли для базы данных пароль или используется пароль по умолчанию, особенно MongoDB и Redis.
- Войдите на свой компьютер, используя SSH, не используйте пароль, войдите с аутентификацией по ключу SSH.
- Своевременно обновляйте систему, чтобы предотвратить 0day-уязвимости, такие как Heartbleed, Shellshock и т. д.
- Измените конфигурацию сервера, HTTPS использует TLS1.2, отключите другие режимы. (стоило того)
- Не включайте онлайн-режим DEBUG. Для некоторых фреймворков режим DEBUG откроет множество разрешений и бэкдоров или выставит некоторые конфиденциальные данные для информации стека ошибок.
- Будьте готовы к плохим парням и DDOS-атакам, пользуйтесь услугами хостинга, обеспечивающими очистку от DDOS
- Контролируйте свою систему и регистрируйте ее (например, используяNew Relicили другой ).
- Если это бизнес 2B, придерживайтесь требований соответствия. Если вы используете AWS S3, рассмотрите возможность использованияшифрование данныхФункция: при использовании AWS EC2 рассмотрите возможность использования функции шифрования диска (теперь системный загрузочный диск также может быть зашифрован).
о людях
- Создайте группу рассылки (например:security@coolcorp.io) и страница сбора информации об уязвимостях для исследователей безопасности.
- В зависимости от вашего бизнеса, ограничьте доступ к пользовательским базам данных
- Будьте вежливы с теми, кто сообщает об ошибках, уязвимостях
- Предоставьте свой код коллегам, у которых есть концепция безопасного кодирования, для проверки (больше глаз)
- При взломе или утечке данных проверяйте журналы перед доступом к данным и уведомляйте пользователей о смене паролей. Вам может понадобиться стороннее агентство для помощи в проведении аудита.
- использоватьNetflix ScumblrБудьте в курсе некоторой информации обсуждения вашей организации (компании) в социальных сетях или поисковых системах, такой как хакерские атаки, уязвимости и т.д.
происхождениеHack-with-Github/Awesome-Hacking Fallible