Veryfying codeigniter csrf令牌

问题描述 投票:1回答:2

我正在张贴此表格,并且正在像这样放置我的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'];?>" />

文档说Tokens may be either regenerated on every submission (default)https://codeigniter.com/user_guide/libraries/security.html

我的问题是,如何实际验证csrf。当我在提交表单时使用$this->security->get_csrf_hash()时,该值应等于提交的哈希值,还是将发布的csrf哈希值视为有效?。

php codeigniter csrf
2个回答
0
投票

您要做的是在$config['csrf_protection']中启用它,并在表单中使用form_open()功能。

CodeIgniter将自动插入并检查CSRF。


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参数来更改此行为

$config['csrf_regenerate'] = TRUE;

选择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]+'
);

我认为这对您非常有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.