我正在使用CodeIgniter来运行我的应用程序,该应用程序分为两部分。基于example.com的“用户”部分和基于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();
答案 0 :(得分:0)
作为临时解决方案,我冒险进入系统文件夹并更改了form_helper
文件中的一些代码。第94行查找表单action
等于基本网址(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"。我很想知道一个不涉及修改核心文件的解决方案。