2016-08-16 15 views
0

Хорошо, все еще пытается обернуть мою голову вокруг того, что они есть, и нужно для ..believe меня, я читал много на нем и думает я понимаю, но я, вероятно, не ...Требуется токен CSRF?

Ближайшие Я могу понять, что они определенно необходимо, когда у вас есть страницы входа в систему в любом виде ...

Мой вопрос в том, что у вас есть основная форма для контактов и/или заполняющая форму для любого причина ... вам нужны жетоны CSRF для этих страниц?

+0

да - не может сделать никакого вреда, поскольку они помогают защититься от массового злоупотребления в качестве контактных форм, форумов и т.д. являются большими целями для спамеры таким образом имея CSRF токен механизма проверок все к хорошим – RamRaider

ответ

1

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 - означает, что вы можете надежно судить, что данные, посланные в скрипт на сервер пришел из действительной и предполагаемого источника.

+0

ничего себе. Большое вам спасибо за то, что нашли время, чтобы выписать этот задумчивый и ответный ответ. Это очень высоко ценится. у меня есть вопрос, основанный на том, что вы сказали ... если вы не возражаете =) ... если моя форма, то есть 'page1.php', идет прямо на страницу' PHPMailer' вместо 'page2.php '... это меняет необходимость проверки факта, что он был отправлен с того же сайта? Кстати, мне нравится ваша смешная аналогия сердитого подростка на форуме ... =) .... хотя кто скажет, что они всего лишь подростки?=) – user273072545345

+0

'page2.php' - это то же самое, что и страница PHPMailer, это результирующая страница, которая делает все, что угодно,' page2.php' может быть любой страницей, что-то делает. Он не должен быть выходной HTML-страницей, просто страницей, которая обрабатывает данные, отправленные ей 'page1.php'. Прежде чем отправлять что-либо объекту PHPMailer, вам нужно запустить оператор 'if', чтобы проверить достоверность отправленных данных. – Martin

Смежные вопросы