当前位置: 首页 > 知识库问答 >
问题:

CodeIgniter仅在某些页面中使用CSRF保护

花永昌
2023-03-14

我想做的是保护一些敏感表单免受codeigniter但不是所有页面中的CSRF攻击。

要保护从CSRF如果我设置它在config.php它适用于所有的页面.有没有办法做到这一点只有一些页面通过设置在控制器?

$config['csrf_protection'] = TRUE;

共有3个答案

万俟浩
2023-03-14

为了获得更安全的方法,您应该始终打开CSRF保护,并且只在配置中的数组中免除一些您希望的页面。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;
    }
} 
尉迟国发
2023-03-14

您可以通过编辑配置来实现这一点。php文件

 $config['csrf_protection'] = FALSE;

步骤1:创建要保护的页面数组

例如,$csrf_pages=array('login','test')

步骤2:检查是否有对受保护页面的请求,然后将其设置为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令牌字段。

倪振海
2023-03-14

现在CI3有了这个特性,我们可以排除配置中的URIhttp://www.codeigniter.com/userguide3/libraries/security.html?highlight=csrf#cross-site-request-forgery-csrf

$config['csrf_exclude_uris'] = array('api/person/add');


$config['csrf_exclude_uris'] = array(
    'api/record/[0-9]+',
    'api/title/[a-z]+'
);
 类似资料:
  • 我有一个目标。我想通过删除除某些特定属性之外的所有属性来修改对象(而不是克隆它)。例如,如果我从这个对象开始: 并且只需要属性p1、p2和p100,如何获得此对象: 我明白如何用蛮力做到这一点,但我想要一个更优雅的解决方案。

  • 问题内容: 如何在除登录页面之外的所有页面上显示导航栏,从而不必在每个需要的页面上附加导航栏文件?现在,我在主应用程序布局上包含了导航栏,应如何处理使其保持干燥? 演示(每页上带有导航栏): 问题答案: 创建像这样的命名视图,并按状态按视图设置templateUrl。对于状态,只需不为视图提供templateUrl ,它就不会呈现导航栏。 更新 :隐藏在非状态。

  • 问题内容: 我想在jQuery的更改事件上在服务器上上传图像,但是使用codeigniter csrf我只能上传一次图像。如何使用Ajax上传图像以进行多个请求。设置此功能时请注意 那么我能够发送多个请求jQuery onchange事件,但是当csrf_protection将为false时,我认为csrf没有任何优势。所以问题是启用csrf_protection时如何使用ajax发送多个请求。我

  • 我想更改PDF文档中特定几页的页面方向。PDF文档是使用html2pdf在html模板外创建的。它是这样的:如果页面的内容(通常是一个表格)太宽而不能以纵向显示,则以横向显示页面。 按照[如何将页面旋转为横向,页面内容应该为纵向iTextpdf][1]中的提示 [1]:如何将页面旋转成横向,页面内容应该在纵向iTextpdf中我已经创建了我的自定义标签和TagWorker。 } 问题是:首先,这没

  • 问题内容: 我喜欢Django,但对于特定的应用程序,我只想使用其中的一部分,但是我对Django在内部的工作方式还不够熟悉,因此也许有人可以为我指明正确的方向查看。 具体来说,我想使用: 模型和数据库抽象 该缓存API,但我想通过缓存来避免数据库查询,而不是HTML生成,并且由于在Django的缓存框架适用于后者,我不 知道是否还没有这真的合适。 我不会使用: Templating urlcon

  • 当我试图刮下面的url时,selenium在大约30秒内没有响应,然后在带有美丽汤的行上发出错误,因为没有html代码要解析。我的selenium+chrome设置对大多数网站都很好,但这个不是:http://www.11st.co.kr/product/sellerproductdetail.tmall?method=getsellerproductdetail&prdno=2609814501