V4.2.2 Operation Level Access Control
Requirement:#
Verify that the application or framework enforces a strong anti-CSRF mechanism to protect authenticated functionality, and effective anti-automation or anti-CSRF protects unauthenticated functionality.
Explanation:#
Веб-приложение не выполняет или не может в достаточной мере проверить, был ли правильно сформирован запрос пользователем, является ли он действительный и непротиворечивый.
Когда веб-сервер предназначен для получения запроса от клиента без какого-либо механизма проверки того, что он был отправлен намеренно, злоумышленник может обманом заставить клиента сделать непреднамеренный запрос к веб-серверу, который будет рассматриваться как подлинный запрос. Это можно сделать с помощью URL-адреса, загрузки изображения, XMLHttpRequest и т. д., что может привести к раскрытию данных или непреднамеренному выполнению кода.
Remediation:#
Вот несколько шагов для устранения атак с подделкой межсайтовых запросов (CSRF):
- Используйте токены CSRF: создайте уникальный токен для каждого сеанса пользователя и сохраните его на сервере. При отправке формы токен включается как скрытое поле и проверяется на сервере, чтобы гарантировать, что он был отправлен тем же пользователем, который запросил форму.
- Проверьте заголовки Origin и Referrer: убедитесь, что заголовки Origin и Referrer соответствуют ожидаемым значениям. Это помогает предотвратить атаки CSRF, использующие методы, отличные от GET или POST.
- Использовать файлы cookie SameSite. Установите для атрибута SameSite всех файлов cookie значение Lax или Strict. Это помогает предотвратить атаки CSRF, позволяя отправлять файлы cookie только с запросами из одного и того же источника.
- Внедрение мер по борьбе с автоматизацией. Внедрение мер по борьбе с автоматизацией для обнаружения и предотвращения автоматизированных атак. Например, для предотвращения автоматических атак можно использовать ограничение скорости, CAPTCHA или IP-фильтрацию.
Вот пример кода на Python, который реализует первые два шага:
Этот код реализует использование токенов CSRF и проверку заголовков Origin и Referrer. Код использует веб-фреймворк Flask и функцию render_template для отображения формы со скрытым полем, содержащим токен CSRF. Код проверяет, что токен, отправленный с формой, соответствует токену, хранящемуся в сеансе пользователя. Код также проверяет соответствие заголовков Origin и Referrer ожидаемым значениям. Атрибут SameSite в файлах cookie и меры по борьбе с автоматизацией должны быть реализованы в соответствии с конкретными требованиями вашего приложения.