升级安全
文档
注意
如果你使用 表单助手 并全局启用 CSRF 过滤器,那么 form_open()
将自动在你的表单中插入一个隐藏的 CSRF 字段。所以你无需自己升级此项。
已更改的内容
已更改在 HTML 表单中实现 CSRF 令牌的方法。
升级指南
要在 CI4 中启用 CSRF 保护,你必须在 app/Config/Filters.php 中启用它
<?php namespace Config; use CodeIgniter\Config\BaseConfig; class Filters extends BaseConfig { // ... public $globals = [ 'before' => [ // 'honeypot', 'csrf', ], ]; // ... }
在你的 HTML 表单中,你必须移除类似于
<input type="hidden" name="<?= $csrf['name'] ?>" value="<?= $csrf['hash'] ?>" />
的 CSRF 输入字段。现在,在 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>