升级安全性

文档

备注

如果使用 表单辅助函数 并全局启用 CSRF 过滤器,那么 form_open() 将自动在表单中插入隐藏的 CSRF 字段。所以你不需要自行升级这个。

变更点

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

升级指南

  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>