Добрый вечер! Почитал про защиту данных при ajax запросе и стал интересно вот что. Есть 3 кита безопасности ajax запросов: HTTP_REFERER token Защита от роботов С первым понятно. С третьим нужна капча для форм (но не для скрипта?). Осталось разбросаться с токеном. Если можно небольшой пример как реализовать защиту по токену. Ну и по защите от роботов посоветуйте чего я не упомянул.
Ответ
Токен подразумевает хранение одних и тех же данных на стороне сервера и пользователя, при каждом запросе проводится сверка этих данных с последующей регенерацией (подразумевается, что эти данные никому больше неизвестны). Другими словами, сервер выводит в форме скрытое поле И записывает его значение, например, в сессию: $_SESSION['csrf_token'] = "md5nonsense"; После этого при последующем запросе эти две величины сравниваются и сервер генерирует новый csrf_token. При таком подходе: а) Значения должны совпасть б) На один запрос уходит один токен. Это не обеспечивает большой защиты (потому что если у злоумышленник захватил куки сессии, то он может полноценно мимикрировать под пользователя) Таким образом обеспечивается защита от простого dos'a формы. Следующим этапом будет хитрость при генерации токена: токен может зависеть от пользовательских атрибутов, и в сессию пишется только некое исходное значение, на основе которого строится токен. Например, можно сделать так: $seed = $_SESSION['csrf_seed'] = mt_rand(0, PHP_INT_MAX); $token = md5($seed.$_SERVER['USER_AGENT'].$_SERVER['REMOTE_ADDR']); В результате токен начинает зависеть как от случайного значения, так и от того, кто проводит запрос. Long story short: вместе с формой уходят некоторые данные, которые известны только пользователю и серверу и не могут быть подделаны (зависят от отправителя запроса), при несовпадении этих данных сервер инвалидирует запрос.
Комментариев нет:
Отправить комментарий