Использование украденного файла cookie в cURL для обхода CSRF

Мне нужно обработать веб-страницу. Эта веб-страница основана на YII framework, а страница входа защищена CSRF tokens. Когда я передаю учетные данные для входа POST method. Я получаю сообщение error 400 и The CSRF token could not be verified.

Я не знаю, как пройти эту защиту. Я не понимаю механизм. Когда я вхожу в браузер браузера Chrome, я вижу, как выглядит сообщение POST. Он имеет 4 параметра: ключ CSRF, логин, пароль, одну пустую переменную. Как браузер получает правильный ключ CSRF для отшлифовки?

У меня есть логин и пароль для этой веб-страницы, и я могу войти в систему как обычный пользователь. Только защищенная страница защищена от CSRF. Могу ли я использовать файл cookie (как это сделать), созданный браузером при обычном входе в систему, передать этот cookie to cURL и начать обработку URLs за страницей входа?

Ответ 1

MrMgr Отвечает в своих комментариях. Я поставил его здесь, чтобы помочь другим людям легко определить ответ.

Ключ CSRF создается для сеанса, и он находится на странице LOGIN как обычный текст. Я могу скопировать его из исходного кода, страницы входа в систему и предоставить cURL script для использования в качестве переменной POST. Ключ CSRF не изменяется после обновления каждой страницы, КЛЮЧ действует до выхода из системы. При выходе из системы ключ CSRF отфильтровывается до сервера для завершения.

Источник

Ответ 2

Знаки CSRF действуют, чтобы сделать это точное действие трудным. Вам нужен лучший способ подделать браузер с PHP. Для этого сохраните все файлы cookie в том, что обычно называется "cookie jar". PHP-реализация curl имеет такую ​​возможность. Все запросы curl, направляемые на этот сайт, должны использовать этот кук файл cookie с этого момента.

Далее вам нужно проанализировать страницу входа, чтобы получить все поля, которые были отправлены. Это включает имя пользователя, пароль, CSRF и другие скрытые поля. Убедитесь, что у вас есть значения для каждого из них. Если он не должен вводиться вами (например, скрытые входы), очистите страницу входа в систему HTML и поместите эти поля в переменные, которые вы можете передать в POST входа. Также не забудьте отправить URL-адрес страницы входа, которую вы очистили в качестве реферера в POST для входа.

Parsing html может быть утомительным, но библиотеки, такие как SimpleHTMLDOM, должны сделать его простым, если вы знакомы с селекторами CSS.