CSRF токены не «определенно нужно» (как, формы будут работать без них), но они являются очень хорошая идея всякий раз, когда представления каких-либо данных из одной веб-страницы, на другую веб-страницу/сценарий. Существует замечательно небольшой способ: доверяет, что любые данные page 2
получает сообщение от page 1
(см. Иллюстрацию ниже). Каждая страница в изоляторах не знает, на какой странице был пользователь, и даже те вещи, которые намечены на это, такие как $_SERVER['HTTP_REFERER']
, могут легко манипулировать пользователями браузеров.
Значки CSRF являются ключом страницы к странице, что дает получающей странице гораздо более высокий уровень доверия к посетителю, исходящему от предполагаемой страницы-отправителя. Развернутое свойство они также могут предотвратить повторение данных, что также является большим бонусом и сокращает недобросовестные спам и потраченные впустую циклы CPU.
Один аспект, который CSRF токены могут быть использованы для:
Предположим, у вас есть форма на странице, страница называется page1.php
и формой является send contact email
, где форма заполняется и затем отправляется, страница, на которую он отправлен (page2.php), может создавать, а затем отправлять контактное письмо предполагаемому получателю.
Из этого следующего шага кто-то может прочитать исходный код формы page1.php
. это тривиально легко и говорит людям, что существуют значения $_POST
и местоположение адресата, на которое отправляется форма (page2.php
).
Простой пользователь загрузит ваш page1.php
, потратьте десять минут на письмо тщательно написанного электронного письма, прежде чем нажимать кнопку SEND и отправьте форму. От формы доходит до page2.php
, который строит свои данные в электронном письме, отправленном на адрес [email protected]
.
Теперь, если кто-то берет исходный код из page1.php
они могут использовать простой PHP скрипт (или любой другой код) обработки, чтобы отправить сотни или тысячи спам-форм page2.php
, каждый из них с правильными данными для создания и отправки из электронной почты это может быть использовано для различных нафарительных процессов, они могут отправлять формы с других сайтов, любых других частей Интернета или даже из всех бот-сетей, если они захотят - page2.php
будут наводнены множеством запросов в секунду, а получатель электронных писем будет иметь почтовый ящик, заполненный бесполезными сообщениями, генерируемыми формой.
Введите CSRF токен
CSRF токен представляет собой уникальный ключ, который сохраняется в виде, при генерации на page1.php
и обычно (но не исключительно) использовать (возможно, случайно), генерируемый $_SESSION
значения, так что, когда форма отправляется, а данные $_POST
отправляются на номер page2.php
, это достаточно надежная проверка, что форма отправляется с того же сайта. Поэтому вместо того, чтобы иметь все бот-сети, отправляющие данные в page2.php
и вызывая много писем, данные не действуют, и вместо этого в сценарии page2.php
запускаются только страницы, представленные с одного и того же веб-сайта.
В случае возникновения ситуации выше вы также можете отслеживать, откуда поступают плохие представления, и использовать другие процессы/скрипты для блокировки/запрещения различных других бот-сетей/серверов от отправки данных на ваш сервер.
выше иллюстрация является формой страхования и процесса управления, так что вы имеете сильную reliablility, что данные, который проходит через CSRF на page2.php
:
if ($_SESSION['key'] === $_POST['key']){
unset($_SESSION['key']); ///prevent repetition
...
send email
}
(к примеру).
Этот оператор if
работает только с данными формы, которые надежно были отправлены из надежного источника (page1.php
). Таким образом, предотвратите использование других серверов на ваших сценариях, предотвращая попытки атаки на DOS, перегружая ваш page2.php
, а также другие другие положительные стороны, зная, что page1.php
отправил данные, которые используются на page2.php
.
Другой аспект CSRF маркеры используются для
См в коде выше, я сбросить в $_SESSION
значение CSRF? Это означает, что если вы нажмете F5 или иным образом обновите визит page2.php
(введите его в свой браузер или что-то еще) , он не будет повторно отправлять настоящие данные дважды. Это может помочь предотвратить людей, заполняющих форму один раз, а затем постоянно повторять ее, как сердитый подросток на форуме (Данные POST всегда сохраняются в HTTP-заголовке страницы и повторно отображаются при вызове страницы, поэтому удаление данных $_POST
в PHP бессмысленно .).
CSRF является механизмом безопасности, - когда передается маркер тест CSRF - означает, что вы можете надежно судить, что данные, посланные в скрипт на сервер пришел из действительной и предполагаемого источника.
да - не может сделать никакого вреда, поскольку они помогают защититься от массового злоупотребления в качестве контактных форм, форумов и т.д. являются большими целями для спамеры таким образом имея CSRF токен механизма проверок все к хорошим – RamRaider