При прохождении моего кода CI 3.1.11 для его очистки (размещенного на локальном хосте XAMPP v2.3.4) кажется, что я сделал что-то, чтобы сервер не принимал любые запросы jqxhr, если у меня есть подделка межсайтовых запросов CI ( csrf) защита работает.
Я использую другие запросы http для получения информации с сервера и внешних файлов, таких как строки в <head>
, которые загружают jquery, мой файл css и т. Д. c. Они прекрасно работают независимо от состояния параметра csrf.
Когда я установил: $config['csrf_protection'] = TRUE;
Мои запросы jqxhr всегда получают ошибку http 403 (отклоненный запрос, который подразумевает предполагаемую попытку взлома). Мой основной вопрос c состоит в том, чтобы понять, почему это происходит, поэтому я могу исправить это и запустить защиту csrf.
Я не знаю, связано ли это, но я обнаружил, что мне нужно только предоставить контроллер и функция к JQXHR, а не полный URL-адрес. Большинство примеров, которые я видел в Интернете, содержат встроенный код Php для вставки base_url впереди. Кажется, что-то в системе (CI?) Хочет добавить base_url к контроллеру / функции, несмотря ни на что. Если я вставлю его сам, он создаст непригодный URL с base_url, появляющимся дважды.
Если я использую. , , var url= "C_library/updateTitle";
$.post(url, { 'tID':tID, 'newTitle':newTitle }, function(data) { . .
. , , запрос работает, если csrf не запущен. Если защита csrf работает, это будет типичный отчет об ошибке консоли:
XHRPOSThttp://localhost/MZlocal/C_library/updateTitle [HTTP/1.1 403 Forbidden 32ms]
Обратите внимание, что URL сформирован правильно.
Также, вероятно, не имеет значения, но вот мой файл .htaccess, который работает (исключает «index. php» из адресной строки).
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Защита csrf является важной функцией CI, что я действительно хотел бы понять лучше. Любая помощь или подсказки относительно того, где я должен смотреть, приветствуется.
Полная конфигурация csrf. php:
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();