Что такое защита от межсайтовой подделки запроса (CSRF) и как ее реализовать в PHP-приложениях?

Пользователь

от elissa , в категории: PHP , год назад

Что такое защита от межсайтовой подделки запроса (CSRF) и как ее реализовать в PHP-приложениях?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от buster , год назад

@elissa 

Защита от межсайтовой подделки запроса (CSRF) - это меры безопасности, предназначенные для защиты пользователя от неавторизованного выполнения определенных действий через веб-приложение.


Для реализации защиты от CSRF в PHP-приложениях рекомендуется применять следующие методы:

  1. Использование токенов CSRF - передавая при каждом запросе уникальный токен пользователю, сервер может проверять, был ли этот токен получен от правильного отправителя.


Для генерации уникальных токенов CSRF рекомендуется использовать функцию hash_hmac():

1
2
3
4
5
6
7
<?php
session_start();
if(empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$csrf_token = $_SESSION['csrf_token'];
?>


Для проверки токена CSRF в PHP можно использовать следующую функцию:

1
2
3
4
5
6
7
8
<?php
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST") {
    if(!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        die("Ошибка: Недействительный токен CSRF");
    }
}
?>


  1. Установка HTTP заголовков Referer и Origin - проверка заголовков Referer и Origin может быть использована для определения, откуда пришел запрос на сервер-приемник и был ли он отправлен со страницы, которой можно доверять.
  2. Использование сессий - использование сессий может помочь предотвратить межсайтовую подделку запросов, поскольку в PHP сессии по умолчанию создаются только для тех запросов, которые приходят со страниц, открытых в том же домене.
  3. Использование куки SameSite - использование атрибута SameSite со значением Strict или Lax в куки может помочь предотвратить межсайтовую подделку запроса, поскольку это указывает браузеру отправлять куки только на запросы с тем же доменом, что и исходная страница.


Реализация защиты от CSRF - это важная часть обеспечения безопасности веб-приложений, поэтому рекомендуется применять все эти методы в сочетании, чтобы обеспечить более высокий уровень защиты от CSRF в PHP-приложениях.