Veryfying codeigniter csrf токен - PullRequest
       9

Veryfying codeigniter csrf токен

1 голос
/ 15 октября 2019

У меня есть эта форма, которую я отправляю, и я помещаю свой токен csrf следующим образом:

метод контроллера

$csrf = array(
        'name' => $this->security->get_csrf_token_name(),
        'hash' => $this->security->get_csrf_hash()
);

, передаваемый для просмотра следующим образом

<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

В документах написано

Жетоны могут быть регенерированы при каждой отправке (по умолчанию): https://codeigniter.com/user_guide/libraries/security.html

Мой вопрос заключается в том, как на самом деле проверяется csrf. Когда я использую $this->security->get_csrf_hash() при отправке формы, будет ли значение равно представленному хешу или как принятый хэш csrf будет считаться действительным?

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Вы можете включить защиту CSRF, изменив файл application / config / config.php следующим образом:

$config['csrf_protection'] = TRUE;

Если вы используете помощник по формам, то form_open () автоматически вставит скрытый csrfполе в ваших формах. Если нет, то вы можете использовать get_csrf_token_name() и get_csrf_hash()

$csrf = array(
        'name' => $this->security->get_csrf_token_name(),
        'hash' => $this->security->get_csrf_hash()
);

<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

Жетоны могут быть либо регенерированы при каждой отправке (по умолчанию), либо сохраняться неизменными в течение всего срока действия файла cookie CSRF. Регенерация токенов по умолчанию обеспечивает более строгую безопасность, но может привести к проблемам с удобством использования, поскольку другие токены становятся недействительными (навигация назад / вперед, несколько вкладок / окон, асинхронные действия и т. Д.). Вы можете изменить это поведение, отредактировав следующий параметр конфигурации

$config['csrf_regenerate'] = TRUE;

Выбор URI может быть внесен в белый список из защиты csrf (например, конечные точки API, ожидающие внешнего POST-содержимого). Вы можете добавить эти URI, отредактировав параметр конфигурации ‘csrf_exclude_uris’:

$config['csrf_exclude_uris'] = array('api/person/add');

Также поддерживаются регулярные выражения (без учета регистра):

$config['csrf_exclude_uris'] = array(
        'api/record/[0-9]+',
        'api/title/[a-z]+'
);

я думаю, что это очень полезно для вас.

0 голосов
/ 15 октября 2019

То, что вам нужно, это включить его в $config['csrf_protection'] и использовать функцию form_open() для вашей формы.

CodeIgniter автоматически вставит и проверит CSRF.

...