Требование аутентификации в параметрах GET и POST, а не только файлы cookie;
Проверка заголовка 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 .