V13.2.3 RESTful Web Service
Requirement:#
Verify that RESTful web services that utilize cookies are protected from Cross-Site Request Forgery via the use of at least one or more of the following: double submit cookie pattern, CSRF nonces, or Origin request header checks.
Explanation:#
Cross-Site Request Forgery (CSRF) - это атака, при которой злоумышленник обманом заставляет жертву выполнять нежелательные действия в веб-приложении, в котором жертва аутентифицирована. В контексте веб-служб RESTful атаки CSRF могут быть запущены путем обмана браузеров пользователей, заставляющих их выполнять запросы от их имени без их ведома или согласия. Чтобы предотвратить такие атаки, ASVS предлагает реализовать один или несколько из следующих методов:
1 Double Submit Cookie Pattern: этот метод включает отправку случайно сгенерированного уникального токена в виде файла cookie вместе с каждым запросом. Это же значение токена также включается в параметры запроса. Затем серверный компонент сравнивает маркер из файла cookie с маркером в параметрах запроса, чтобы проверить подлинность запроса. 1 CSRF Nonce: Nonce означает «число, используемое один раз». При таком подходе для каждого пользовательского сеанса или запроса генерируется уникальное непредсказуемое значение (nonce). Одноразовый номер встроен в запрос, как правило, в виде скрытого поля формы или дополнительного заголовка. Компонент на стороне сервера проверяет полученный одноразовый номер, чтобы убедиться, что запрос является законным и не является атакой. 1 Origin Request Header Checks: заголовок запроса источника содержит источник (домен), из которого отправляется запрос. Проверяя заголовок Origin, серверный компонент может гарантировать, что запросы принимаются только от определенных доверенных доменов, предотвращая запросы, исходящие от вредоносных веб-сайтов.
Remediation:#
Для защиты от CSRF-атак в RESTful веб-службах, использующих файлы cookie, требование ASVS предполагает использование по крайней мере одной или нескольких из следующих техник:
Double Submit Cookie Pattern: Создайте уникальный токен для каждого сеанса пользователя и включите его в файл cookie и в параметры запроса. На стороне сервера сравните токен из куки с токеном в параметрах запроса, чтобы убедиться в подлинности запроса.
Пример реализации с использованием языка программирования Java: Double Submit Cookie Pattern
CSRF Nonces: Создайте уникальный одноразовый номер для каждой пользовательской сессии или запроса и вставьте его в запрос либо в виде скрытого поля формы, либо в виде дополнительного заголовка. Проверьте полученный одноразовый номер на стороне сервера, чтобы убедиться в легитимности запроса.
Пример кода, реализующий технику CSRF Nonces с использованием языка PHP: CSRF Nonces
Origin Request Header Checks: Настройте компонент на стороне сервера, чтобы он проверял заголовок запроса Origin и принимал запросы только от определенных доверенных доменов. Отклонять запросы, исходящие не из этих доверенных доменов. Origin Request Header Checks