【问题标题】:CodeIgniter CSRF Not Working on SubdomainCodeIgniter CSRF 不适用于子域
【发布时间】:2015-08-11 15:07:27
【问题描述】:

我正在使用 CodeIgniter 运行我的应用程序,该应用程序分为两个部分。基于 example.com 的“用户”部分和基于 business.example.com 的“业务”部分。当我使用 form_open 函数但不在业务部分时,CSRF 令牌会自动添加到表单字段中。

配置.php

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '.'.ltrim(rtrim($config['base_url'], '/'), 'http://'); //generates ".example.com"
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf';
$config['csrf_cookie_name'] = 'csrf';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = FALSE;
$config['csrf_exclude_uris'] = array();

【问题讨论】:

    标签: php codeigniter csrf


    【解决方案1】:

    作为临时解决方案,我冒险进入系统文件夹并更改了form_helper 文件中的一些代码。第 94 行查找表单 action 等于基本 url (http://example.com) 并且不考虑子域 (http://business.example.com)。将第 94 行更改为:

    if ($CI->config->item('csrf_protection') === TRUE && strpos($action, $CI->config->base_url()) !== FALSE && ! stripos($form, 'method="get"'))
    

    if ($CI->config->item('csrf_protection') === TRUE && strpos($action, ltrim($CI->config->base_url(), 'http://')) !== FALSE && ! stripos($form, 'method="get"'))
    

    基本上我已经从基本网址中删除了“http://”,我正在寻找“example.com”而不是“http://example.com”。我很想知道一个不涉及修改核心文件的解决方案。

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 2017-10-28
      • 2015-08-13
      • 1970-01-01
      相关资源
      最近更新 更多