CSRF НЕ РАБОТАЕТ С JMETER
У меня возникла проблема с JMeter. Я пытаюсь провести тесты производительности с помощью расширения BlazeMeter. При выполнении некоторых запросов я получаю ошибку CSRF. Я уже пробовал извлечь токен с помощью экстрактора регулярных выражений, но он его не находит.
Я попытался создать это регулярное выражение
введите описание изображения здесь
Использование регулярных выражений для получения значений из HTML-ответов не самая лучшая идея, если токен находится в теле ответа, то наиболее очевидным выбором будет CSS Selector Extractor
И вам нужно применить экстрактор к сэмплеру, в котором токен появляется в ответе, см. Scoping Rules запись руководства пользователя
Если вам нужна более полная помощь, поделитесь хотя бы частичным ответом, где появляется токен, так мы сможем придумать правильную настройку постпроцессора.
А пока я могу лишь посоветовать ознакомиться со статьей What is CSRF & How to Load Test CSRF-Protected Websites
Обычно это происходит, когда в запросе отсутствует или неверно указан токен CSRF. Вот как вы можете решить эту проблему шаг за шагом:
1. Убедитесь, что CSRF-токен извлечен правильно
Сначала убедитесь, что вы правильно извлекаете CSRF-токен из ответов вашего приложения. Для этого можно использовать экстрактор регулярных выражений в JMeter. Вот как это делается:
Добавьте экстрактор регулярных выражений в запрос, загружающий страницу, содержащую CSRF-токен.
- Поле для проверки:
Body
- Регулярное выражение:
name='csrfmiddlewaretoken' value='(.+?)'
- Шаблон:
$1$
- Номер совпадения:
1
- Reference Name:
CSRF_TOKEN
- Поле для проверки:
Убедитесь, что у вас есть утверждение Response Assertion для подтверждения наличия CSRF-токена в теле ответа.
2. Используйте извлеченный токен в последующих запросах
Далее необходимо использовать извлеченный CSRF-токен в последующих запросах:
- В HTTP-запросе, где требуется токен CSRF, добавьте токен в параметры запроса:
- Имя:
csrfmiddlewaretoken
- Значение:
${CSRF_TOKEN}
- Имя:
3. Советы по отладке
- Проверьте, правильно ли обрабатываются куки: Токены CSRF часто полагаются на куки. Убедитесь, что в план тестирования добавлен HTTP Cookie Manager для управления cookies.
- Проверка извлечения токена: Добавьте отладочный пробник и слушатель View Results Tree, чтобы убедиться, что токен CSRF извлекается и передается правильно.
- Перезагрузите страницу при необходимости: Иногда CSRF-токен может измениться после определенных действий (например, входа в систему). Убедитесь, что вы перезагружаете необходимые страницы, чтобы получить обновленный CSRF-токен.
4. Пример конфигурации
Вот упрощенный пример того, как может выглядеть ваш план тестирования:
HTTP Request Sampler (Load Page with CSRF token)
- URL:
http://your-website.com/form-page
- Добавьте экстрактор регулярных выражений для извлечения CSRF-токена.
- URL:
Отладочный пробник (Необязательно)
- Для проверки извлеченного токена.
HTTP Request Sampler (Форма отправки)
- URL:
http://your-website.com/submit-form
- Добавьте параметры:
csrfmiddlewaretoken
:${CSRF_TOKEN}
- (Другие параметры формы)
- URL:
Слушатели
- Добавьте дерево результатов просмотра, чтобы увидеть детали запроса и ответа.
5. Пример конфигурации экстрактора регулярных выражений
- Название: Извлечение CSRF-токена
- Применить к: Основной выборке и подвыборкам
- Поле для проверки: Тело
- Имя ссылки: CSRF_TOKEN
- Регулярное выражение:
name='csrfmiddlewaretoken' value='(.+?)'
- Шаблон:
$1$
- Номер матча: 1
- Значение по умолчанию: NOT_FOUND
6. Пример HTTP-запроса с CSRF-токеном
- Название: Отправить форму
- URL:
http://your-website.com/submit-form
- Параметры:
- Имя:
csrfmiddlewaretoken
- Значение:
${CSRF_TOKEN}
- (Другие параметры формы)
- Имя:
Следуя этим шагам, вы сможете правильно извлекать и использовать токен CSRF в своих тестах JMeter, избегая тем самым ошибки 403 Forbidden, связанной с проверкой CSRF.