В этом посте давайте обсудим использование шаблона токена синхронизатора для предотвращения CSRF (CSRF означает подделку межсайтового запроса).

Шаблон токена синхронизатора (STP) — это метод, при котором токен, секретное и уникальное значение для каждого запроса, встраивается веб-приложением во все HTML-формы и проверяется на стороне сервера.

Затем токен генерируется сервером с обеспечением уникальности. Здесь сервер генерирует токен для каждого сеанса. В этом случае злоумышленник не может разместить правильный токен в своих запросах для их аутентификации.
(ссылка — нажмите здесь)

Как предотвратить?

  • Создайте стандартные заголовки, чтобы убедиться, что запрос имеет тот же источник.
  • Создание случайной строки на стороне сервера и добавление ее в тело внешнего интерфейса и проверка обоих значений, когда пользователь отправляет значения в веб-приложение.

Давайте углубимся в мое задание — исходный код (ссылка на Github — Нажмите здесь)

Во-первых, нам нужно войти в веб-приложение, введя имя пользователя и пароль. Я жестко закодировал учетные данные

(имя пользователя как «admin», пароль как «password»)

здесь мы ввели учетные данные, используя метод POST. если мои учетные данные успешно аутентифицированы, уникальный идентификатор сеанса и токен CSRF будут созданы вместе с этим сеансом, и в то же время сгенерированный идентификатор сеанса будет установлен в качестве файла cookie в браузере.

Токен CSRF хранится вместе с идентификатором сеанса на стороне сервера. мы можем увидеть сохраненный токен CSRF в текстовом файле «Tokens»,

Здесь, после входа в систему, браузер отправит вызов Ajax, чтобы получить токен CSRF на csrf_token_generator.php. Этот вызов Ajax содержит идентификатор сеанса. Затем сервер ответит соответствующим токеном CSRF вместе с телом ответа.

Именно здесь токен встраивается в скрытое поле формы submit. Использована функция openssl_randon_pseudo_bytes() в PHP для генерации 32-битного токена CSRF. Затем сгенерированное значение преобразуется в значение base64 с помощью base64_encode(), чтобы сделать его более безопасным. мы не видим, что это происходит при загрузке страницы.

После загрузки страницы

Я реализовал запрос POST, чтобы обновить некоторый статус пользователя. Почтовый запрос содержит этот сгенерированный токен CSRF и файл cookie сеанса.

Когда мы нажимаем «updatepost», мы отправляем запрос на публикацию. Затем сервер проверяет идентификатор сеанса, полученный из заголовка запроса, и токен CSRF в теле.

Если токен действителен, сервер принимает запрос

Если токен недействителен, сервер игнорирует запрос,

Как мы можем сказать, что метод безопасен?

Предположим, злоумышленник отправляет нам ссылку, содержащую скрытый почтовый запрос для обновления статуса пользователя, но злоумышленник не может добавить токен CSRF в POST-запрос злоумышленника. поэтому сервер проигнорирует запрос.

Ссылка на источник: https://github.com/Ninthujan/CSRF-Synchronizer-Token-Pattern.git