атака, при которой злоумышленник заставляет пользователя выполнять нежелательные действия в веб-приложении, в котором тот уже авторизован
В 2000 были представленны HTTP Cookie во всех основных браузерах, в начале 2000 была найдена уязвимость CSRF.
Пользователь заходит в веб-приложение и авторизуется (например, в онлайн-банке)
Приложение создает сессию, и пользовательский браузер сохраняет cookies
Злоумышленник отправляет пользователю ссылку или включает вредоносный код на стороннем сайте
Браузер пользователя автоматически прикрепляет cookies к запросу, считая его легитимным
Чтобы Cookie файлы послались должны совпасть следующие факторы
Предположим, у пользователя есть учетная запись в онлайн-банке. После авторизации он оставил вкладку браузера открытой
Главной целью на этом этапе является запуск вредоносного кода на стороне клиента
Так как реквест направляется на
https://bank.example.com, то соответственно все существующие куки, которые
привязаны к сайту отправляются вместе с реквестом
flowchart TD
A[Злоумышленник] --> B[ Вредоносный сайт ] --> C[ Браузер ] --> D[ Сервер ]
...
...
Каждое изменение данных должно сопровождаться уникальным токеном, который генерируется на сервере и передается в форму или запрос.
уникальные строки, которые генерируются сервером для каждого сеанса пользователя или формы
CSRF-токен передается пользователю на
стадии загрузки страницы
Сервер должен проверять заголовки Origin и Referer для каждого запроса, чтобы убедиться, что запрос пришел с доверенного источника
if request.headers['Origin'] != 'https://trustedwebsite.com':
abort(403) # Запрещаем выполнение запроса
Для выполнения действий, изменяющих данные (например, переводы денег, удаление данных), следует использовать только метод POST
@app.route('/delete_item', methods=['POST'])
def delete_item():
# Логика удаления элемента
pass
для чувствительных операций, таких как переводы средств, изменение паролей и другие критичные действия.
механизм безопасности, который помогает предотвратить XSS-атаки, но также может быть полезен для защиты от CSRF
Content-Security-Policy: default-src 'self'; script-src 'self'; img-src 'self' https://trusted-image-source.com;
механизм, который позволяет ограничивать или разрешать обмен ресурсами между различными источниками (доменами)
http://example1.com на
http://example2.com не будет работать,
если CORS не настроен
Access-Control-Allow-Origin # домены, которые имеют доступ
Access-Control-Allow-Methods # Методы, которые разрешены (GET, POST...)
Access-Control-Allow-Headers # Заголовки, которые могут быть отправлены вместе с запросом
Access-Control-Allow-Credentials # Могут ли отправляться Cookies
Access-Control-Allow-Origin: https://client-app.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Authorization