От распространённых уязвомостей, вроде SQL инъекций, я свой сайт более-менее защитил. Теперь вот узнал о такой уязвомости, как Сross Site Request Forgery. Рекомендуемое решение — добавление в параметр запроса некоего "токена".
Вопрос: чем является этот токен и как его использовать? Генерировать какое-то случайное значение и передавать его сначала в звпрос, а потом сравнивать на сервере? Как правильно это значение генерировать? Как правильно его добавлять к запросу?
Конечно, как это приблизительно выглядит я уже нашел в Сети, но этот проект на сайте нужно развивать, не так ли?
Принятый ответ
bladget, ну так если у тебя уже используется POST запрос, то речи о CSRF и быть не может. Соль этой штуки в том, что у тебя какие то действия выполняются через обычную ссылку, например - удаление всех сообщений почты происходит по ссылке
http://some.com/mail/?do=remove&scope=all
ты берешь на другом сайте и этому юзеру вставляешь картинку
[img]http://some.com/mail?do=remove&score=all[/img]
все это рендерится вот в это
<img src="http://some.com/mail?do=remove&score=all">
браузер видит картинку, начинает её грузить по этому адресу, он отправляет запрос
GET /mail?do=remove&score=all HTTP1.0
Host: some.com
Referer: no-name.com
Cookies: {cookie for some.com}
сервер это принимает, смотрит куки, видит что юзер авторизован. И начинает выполнять свои действия, потом отправляет результат обратно
{какой то хеадер ответа}
<h2>All messages from you mailbox are removed.</h2>
в результате:
картинка не отобразилась, потому что браузер получил не картинку
у юзера удалились все его сообщения из почтого ящика, и он этого не заметил
В этом и суть CSRF
картинка не отобразилась, потому что браузер получил не картинку
у юзера удалились все его сообщения из почтого ящика, и он этого не заметил
В этом и суть CSRF
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован alexprey
картинка не отобразилась, потому что браузер получил не картинку
у юзера удалились все его сообщения из почтого ящика, и он этого не заметил
В этом и суть CSRF
+
Хотя в таком случае какой смысл делать токен? >_<