Я использую codeigniter, и я включил csrf в config.php, как показано ниже.
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token';
$config['csrf_cookie_name'] = 'csrf_cookie';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
Затем, чтобы избежать ошибки «Обнаружена ошибка. Запрошенное вами действие не разрешено». Я добавил следующий код для каждой формы в веб-представлениях.
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
Этот код генерирует токен, и ошибка была устранена. Но токен одинаков для каждой страницы из-за <?php echo $this->security->get_csrf_hash(); ?>
,
При просмотре исходного кода по представлению исходного кода на веб-странице токен хорошо виден.
Я хочу знать, этот метод предотвращения CSRF? Или я должен генерировать случайный токен? Или как лучше всего предотвратить csrf с помощью codeigniter.
Токены случайны. Но Codeigniter будет использовать то же значение токена, пока не истечет срок действия файла cookie CSRF ИЛИ, если $config['csrf_regenerate'] = TRUE;
это создаст новое значение токена на каждом СООБЩЕНИЕ запрос.
Запросы GET (т. Е. Переход на другую страницу сайта) не генерируют новый токен.
Пытаться form_open('controller/method');
для HTML-формы.
Это автоматически создаст случайный токен csrf в скрытом типе, не нужно делать это вручную.