Как защитить свой REST API
Безопасность - это не запоздалая мысль.
Она должна быть неотъемлемой частью любого проекта разработки, а также для REST API. , Существует несколько способов защиты RESTful API, например basi c auth , OAuth et c.
но одна вещь уверена, что API RESTful не должны иметь состояния - поэтому проверка подлинности / авторизация запроса не должна зависеть от файлов cookie или сеансов.
Вместо этого каждый запрос API должен сопровождаться какими-то учетными данными аутентификации для сортировки должен быть проверен на сервере для каждого запроса.
Рекомендации по защите REST API
Ниже приведенные пункты могут служить контрольным списком для разработки механизма безопасности для API REST.
Сохраняйте это простым
Защитите API / систему - насколько она должна быть защищена. Каждый раз, когда вы усложняете решение «излишне», вы также можете оставить дыру.
Всегда использовать HTTPS
Всегда используя SSL , учетные данные аутентификации могут быть упрощены до произвольно сгенерированного токена доступа, который доставляется в поле имени пользователя HTTP Basi c Auth. Его относительно просто использовать, и вы получаете множество функций безопасности бесплатно.
Если вы используете HTTP 2 , для повышения производительности - вы даже можете отправлять несколько запросов через одиночное соединение , таким образом вы избежите полной нагрузки на TCP и SSL при последующих запросах.
Использовать пароль Ha sh
Пароли всегда должны быть хешированы защитить систему (или минимизировать ущерб), даже если она будет скомпрометирована в некоторых попытках взлома. Существует множество таких алгоритмов хеширования , которые могут оказаться действительно эффективными для защиты паролем, например алгоритмы PBKDF2, bcrypt и scrypt.
Никогда не раскрывайте информацию по URL-адресам
Имена пользователей, пароли, токены сеансов и ключи API не должны появляться в URL-адресе, поскольку это может быть записано в журналах веб-сервера, что делает их легко используемыми.
https://api.domain.com/user-management/users/{id}/someAction?apiKey=abcd123456789 //Very BAD !!
Приведенный выше URL-адрес предоставляет ключ API , Поэтому никогда не используйте эту форму безопасности.
Рассмотрите OAuth
Хотя basi c auth достаточно для большинства API и если реализовано правильно, это также безопасно - все же вы можете рассмотреть OAuth . Инфраструктура авторизации OAuth 2.0 позволяет стороннему приложению получать ограниченный доступ к службе HTTP, либо от имени владельца ресурса, организуя взаимодействие утверждения между владельцем ресурса и службой HTTP, либо позволяя стороннему приложению получить доступ от своего имени.
Рассмотреть возможность добавления отметки времени в запросе
Наряду с другими параметрами запроса вы можете добавить отметку времени запроса в качестве настраиваемого заголовка HTTP в запросах API. , Сервер сравнивает текущую метку времени с меткой времени запроса и принимает запрос только в том случае, если он находится в пределах разумного периода времени (возможно, 1-2 минуты).
Это предотвратит очень базовое воспроизведение c атакует от людей, которые пытаются перебор вашей системы без изменения этой отметки времени.
Проверка входных параметров
Проверка параметров запроса при самый первый шаг, прежде чем он доходит до логики приложения c. Поставьте строгие проверки и отклоните запрос немедленно, если проверка не пройдена. В ответе API отправьте соответствующие сообщения об ошибках и пример правильного формата ввода для улучшения взаимодействия с пользователем.
Благодаря Джерому Солтцеру и Майклу Шредеру Защита информации в компьютерных системах »Джерому Солтцеру и Майклу Шредеру
См .: https://owasp.org/www-project-cheat-sheets/cheatsheets/REST_Security_Cheat_Sheet