предотвращение csrf в php

  1. Требование аутентификации в параметрах GET и POST, а не только файлы cookie;

  2. Проверка заголовка HTTP Referer;

видел этот пост в Википедии и задавался вопросом, как я могу их применять

хорошо … Я использую фреймворк Kohana PHP, и у меня есть возможность определить заголовок referrer, но что именно я проверяю в заголовке referrer? функция framework возвращает URL-адрес реферера

и как я могу проверить параметры GET и POST? против чего? хранящаяся информация? ожидаемый тип?

Чтобы предотвратить CSRF, вы захотите проверить одноразовый токен, POST'ed и связанный с текущим сеансом. Что-то вроде следующего. , ,

На странице, где пользователь запрашивает удаление записи:

confirm.php

<?php session_start(); $token= md5(uniqid()); $_SESSION['delete_customer_token']= $token; session_write_close(); ?> <html> <body> <form method="post" action="confirm_save.php"> <input type="hidden" name="token" value="<?php echo $token; ?>" /> Do you really want to delete? <input type="submit" value=" Yes " /> <input type="button" value=" No " onclick="history.go(-1);" /> </form> </body> </html> 

Затем, когда дело доходит до фактического удаления записи:

confirm_save.php

 <?php session_start(); $token = $_SESSION['delete_customer_token']; unset($_SESSION['delete_customer_token']); session_write_close(); if ($token && $_POST['token']==$token) { // delete the record } else { // log potential CSRF attack. } ?> с <?php session_start(); $token = $_SESSION['delete_customer_token']; unset($_SESSION['delete_customer_token']); session_write_close(); if ($token && $_POST['token']==$token) { // delete the record } else { // log potential CSRF attack. } ?> 

Маркер должен быть трудно угадать, уникальный для каждого запроса на удаление, принятый только через $ _POST и истекающий через несколько минут (срок действия не показан в этом примере).

При проверке рефералов все ваши действия направлены на то, чтобы рефери был на вашем сайте / в системе. Если референт не существует или находится на чужом сайте, проверка реферальных данных терпит неудачу, и вы можете не захотеть соблюдать любой запрос.

В прошлом проблемы с различными технологиями и браузерами (flash..et al) допускали подделку реферальных заголовков. Его что-то рассмотреть. Существует несколько способов использования javascript для ссылки на ресурсы, в которых данные реферала отсутствуют / переданы в заголовке запроса.

Такое поведение несколько отличается между браузерами. Если вы используете javascript для отправки формы, как правило, хорошо. Если вы используете что-то вроде window.location, скорее всего, вам не следует ожидать, что реферальные данные будут присутствовать.

Популярный метод предотвращения CSRF заключается в том, чтобы не использовать файлы cookie и всегда передавать состояние между ссылками … Передача токена сеанса во всех ссылках в приложении.

[Примечание:] Структура Kohana устарела, новая вилка для Kohana PHP 7 – https://koseven.ga/, и она поддерживает функциональность CSRF – это класс безопасности.

Вы можете использовать Официальную функцию безопасности koseven. Вот ссылка на класс безопасности koseven .