Как проверить необработанные данные 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

Другие вопросы по тегам