我要发布此表格,并像这样放置我的csrf令牌
控制器方法
$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()
时,该值等于提交的哈希值,还是将发布的csrf哈希值视为有效?。
答案 0 :(得分:0)
要做的是在$config['csrf_protection']
中启用它,并在表单中使用form_open()
函数。
CodeIgniter将自动插入并检查CSRF。
答案 1 :(得分:0)
您可以通过以下方式更改application / config / config.php文件来启用CSRF保护:
$config['csrf_protection'] = TRUE;
如果使用表单助手,则form_open()将自动在表单中插入一个隐藏的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;
可以从csrf保护中将选择URI列入白名单(例如,期望外部发布内容的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]+'
);
我认为这对您非常有帮助。