升级安全

文档

注意

如果你使用 表单助手 并全局启用 CSRF 过滤器,那么 form_open() 将自动在你的表单中插入一个隐藏的 CSRF 字段。所以你无需自己升级此项。

已更改的内容

  • 已更改在 HTML 表单中实现 CSRF 令牌的方法。

升级指南

  1. 要在 CI4 中启用 CSRF 保护,你必须在 app/Config/Filters.php 中启用它

    <?php
    
    namespace Config;
    
    use CodeIgniter\Config\BaseConfig;
    
    class Filters extends BaseConfig
    {
        // ...
    
        public $globals = [
            'before' => [
                // 'honeypot',
                'csrf',
            ],
        ];
    
        // ...
    }
    
  2. 在你的 HTML 表单中,你必须移除类似于 <input type="hidden" name="<?= $csrf['name'] ?>" value="<?= $csrf['hash'] ?>" /> 的 CSRF 输入字段。

  3. 现在,在 HTML 表单中,您必须在表单正文的某处添加 <?= csrf_field() ?>,除非您正在使用 form_open()

代码示例

CodeIgniter 版本 3.x

<?php

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

?>

<form>
    <input name="name" type="text">
    <input name="email" type="text">
    <input name="password" type="password">

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

CodeIgniter 版本 4.x

<form>
    <input name="name" type="text">
    <input name="email" type="text">
    <input name="password" type="password">

    <?= csrf_field() ?>
    <input type="submit" value="Save">
</form>