我想要做的是保护一些敏感表单免受CSRF
攻击,codeigniter
但不是所有页面。
为了防止CSRF
我在 config.php 中设置它,它适用于所有页面。有什么方法可以通过在控制器中设置仅对某些页面执行此操作吗?
$config['csrf_protection'] = TRUE;
我想要做的是保护一些敏感表单免受CSRF
攻击,codeigniter
但不是所有页面。
为了防止CSRF
我在 config.php 中设置它,它适用于所有页面。有什么方法可以通过在控制器中设置仅对某些页面执行此操作吗?
$config['csrf_protection'] = TRUE;
您可以通过编辑config.php
文件来做到这一点
$config['csrf_protection'] = FALSE;
第 1 步:创建要保护的页面数组
例如。$csrf_pages = array('login','test');
Step2:检查是否有对受保护页面的请求,然后将其设置为TRUE;
if (isset($_SERVER["REQUEST_URI"])) {
foreach ($csrf_pages as $csrf_page){
if(stripos($_SERVER["REQUEST_URI"],$csrf_page) !== FALSE) {
$config['csrf_protection'] = TRUE;
break;
}
}
}
第 3 步:将此添加到您的视图中
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash();?>" />
或者简单地使用 form_open() 函数自动添加隐藏的 CSRF 令牌字段。
现在 CI3 有了这个特性,我们可以在配置 http://www.codeigniter.com/userguide3/libraries/security.html?highlight=csrf#cross-site-request-forgery-csrf中排除 URI
$config['csrf_exclude_uris'] = array('api/person/add');
$config['csrf_exclude_uris'] = array(
'api/record/[0-9]+',
'api/title/[a-z]+'
);
为了更安全的方法,您应该始终打开 CSRF 保护,并且只在 config.php 文件的数组中排除您希望的一些页面。
$config['csrf_protection'] = TRUE;
然后设置一组您希望免除 CSRF 保护的链接:
$csrf_off = array(
"/api",
"/api/example",
"/somelink/something/example"
);
现在关闭那些阵列链接 CSRF 保护。
if (isset($_SERVER["REQUEST_URI"])) {
if (in_array($_SERVER["REQUEST_URI"],$csrf_off)) {
$config['csrf_protection'] = FALSE;
}
}