[英]Veryfying codeigniter csrf token
我有我要发布的这个表格,我正在像这样放置我的 csrf 令牌
controller 方法
$csrf = array(
'name' => $this->security->get_csrf_token_name(),
'hash' => $this->security->get_csrf_hash()
);
像这样通过查看
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
文档说
令牌可以在每次提交时重新生成(默认): https://codeigniter.com/user_guide/libraries/security.html
我的问题是如何实际验证 csrf。 当我在提交表单时使用$this->security->get_csrf_hash()
时,该值是否应等于提交的 hash 或者如何将发布的 csrf hash 视为有效?
你要做的是在你的$config['csrf_protection']
中启用它,并为你的表单使用form_open()
function。
CodeIgniter 将自动插入并检查 CSRF。
您可以通过以下方式更改您的 application/config/config.php 文件来启用 CSRF 保护:
$config['csrf_protection'] = TRUE;
如果您使用表单助手,那么 form_open() 将自动在您的 forms 中插入一个隐藏的 csrf 字段。 如果没有,那么您可以使用get_csrf_token_name()
和get_csrf_hash()
$csrf = array(
'name' => $this->security->get_csrf_token_name(),
'hash' => $this->security->get_csrf_hash()
);
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
令牌可以在每次提交时重新生成(默认),也可以在 CSRF cookie 的整个生命周期内保持不变。 令牌的默认重新生成提供了更严格的安全性,但由于其他令牌变得无效(后退/前进导航、多个选项卡/窗口、异步操作等),可能会导致可用性问题。 您可以通过编辑以下配置参数来更改此行为
$config['csrf_regenerate'] = TRUE;
Select URI 可以从 csrf 保护中列入白名单(例如 API 端点需要外部发布的内容)。 您可以通过编辑'csrf_exclude_uris'
配置参数来添加这些 URI:
$config['csrf_exclude_uris'] = array('api/person/add');
还支持正则表达式(不区分大小写):
$config['csrf_exclude_uris'] = array(
'api/record/[0-9]+',
'api/title/[a-z]+'
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.