CSRF Защита Codeigniter, генерирующий случайный токен

Я использую 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.

1

Решение

Токены случайны. Но Codeigniter будет использовать то же значение токена, пока не истечет срок действия файла cookie CSRF ИЛИ, если $config['csrf_regenerate'] = TRUE; это создаст новое значение токена на каждом СООБЩЕНИЕ запрос.

Запросы GET (т. Е. Переход на другую страницу сайта) не генерируют новый токен.

1

Другие решения

Пытаться form_open('controller/method'); для HTML-формы.

Это автоматически создаст случайный токен csrf в скрытом типе, не нужно делать это вручную.

1