Как проверить необработанные данные CSRF в CodeIgniter4?
Генератор данных CSRF
var data = {
token: <?php echo csrf_token(); ?>,
hash: <?php echo csrf_hash(); ?>
};
// The `data` object will be sent as POST data to `example.com/recipient` via jQuery AJAX
Валидатор данных CSRF
<?php
$is_valid = method_or_function_for_csrf_validation( $_POST['token'], $_POST['hash'] );
// Of course, the `method_or_function_for_csrf_validation()` function is just fiction
?>
В method_or_function_for_csrf_validation()
функция просто вымышленная и несуществующая. Я не знаю, как составить валидатор для данных CSRF. Есть ли такая функция?
Как проверить эти необработанные данные CSRF в CodeIgniter4?
2 ответа
Возможно, я немного опоздал, но это также может помочь другим людям. Вы можете активировать глобальную проверку csrf, как написано в официальной документации.
Если вы хотите вручную проверить токен csrf, вы можете создать файловый помощник в
Helpers
папка, как
security_helper.php
и поместите это в файл:
<?php
function verifyCsrf(){
$request = \Config\Services::request();
$security = \Config\Services::security();
try
{
$security->CSRFVerify($request);
}
catch (SecurityException $e)
{
if (config('App')->CSRFRedirect && ! $request->isAJAX())
{
return redirect()->back()->with('error', $e->getMessage());
}
throw $e;
}
}
function setCsrf(){
$request = \Config\Services::request();
$security = \Config\Services::security();
$security->CSRFSetCookie($request);
}
В функции контроллера, в которой вы хотите сгенерировать csrf, просто загрузите помощник и вызовите функцию, например:
helper('security')
setCsrf();
В функции контроллера, где вы хотите проверить csrf, загрузите помощник и вызовите функцию следующим образом:
helper('security')
verifyCsrf();
Для codeigniter4.0.4, если поставить csrf_field()
в форму, и вы реализовали вспомогательный помощник формы ('form') в контроллере, тогда вы можете подтвердить значение, скажем, токена CSRF в контроллере, который форма отправляет для использования:
echo $ this-> request-> getVar (csrf_token ());
теперь, как я понимаю, метод Class Security Class вызывается автоматически для проверки:
публичная функция CSRFVerify(RequestInterface $request)
{}
Security.php находится в /var/www/htdocs/appstarter/system/Security/Security.php на моем apache