Я использую CodeIgniter для запуска моего приложения, которое разбивается на два раздела. Раздел "пользователь", основанный на example.com, и раздел "бизнес", основанный на business.example.com. При использовании пользовательского раздела токен CSRF автоматически добавляется в поля формы, когда я использую функцию form_open
но не в бизнес-разделе.
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 ищет форму 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://" из базового url, и я ищу "example.com" вместо " http://example.com ". Мне бы очень хотелось узнать решение, которое не связано с модификацией основных файлов.