CodeIgniter CSRF 不适用于子域

CodeIgniter CSRF Not Working on Subdomain

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

Config.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();

作为临时解决方案,我冒险进入系统文件夹并更改了 form_helper 文件中的一些代码。第 94 行寻找等于基数 url (http://example.com) and does not take into account for sub domains (http://business.example.com) 的形式 action。将第 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"'))

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