Параметры X-КАДРА отображаются дважды, а X-XSS-ЗАЩИТА отображается неправильно
Я пытаюсь исправить свои заголовки. Я вижу две ошибки при проверке сетевых запросов при посещении своей страницы:
1) X-FRAME-OPTIONS: SAMEORIGIN
отображается дважды:
Cache-Control:no-cache
Connection:Keep-Alive
Content-Encoding:gzip
Content-Type:text/html; charset=UTF-8
Date:Wed, 04 Oct 2017 12:58:30 GMT
Keep-Alive:timeout=3, max=1000
Server:Apache
Set-Cookie:laravel_session=eifQ%3D%3D; expires=Wed, 04-Oct-2017 14:58:30 GMT; Max-Age=7200; path=/; secure; httponly
Set-Cookie:XSRF-TOKEN=n0%3D; expires=Wed, 04-Oct-2017 14:58:30 GMT; Max-Age=7200; path=/
Transfer-Encoding:chunked
X-CDN:Incapsula
X-Frame-Options:SAMEORIGIN * <-------------- HERE
X-Frame-Options:SAMEORIGIN * <-------------- HERE
X-Iinfo:7-6626704-6651371 NNNN CT(0 0 0) RT(1507121414380 495318) q(0 1 1 -1) r(2 2) U16
X-XSS-Protection:%E2%80%9C1;mode=block%E2%80%9D <-------- Strange Encoding here...
2) Я вижу следующую ошибку на консоли для X-XSS-PROTECTION
:
Ошибка синтаксического анализа заголовка X-XSS-Защита: â1; режим=блокировка: ожидается 0 или 1 в позиции символа 0. Будут применены меры защиты по умолчанию.
Я использую Laravel 5.0. Промежуточное программное обеспечение FrameGuard.php
по умолчанию не активировано с Laravel 4.2, но у вас есть возможность включить его, если это необходимо. Когда он отключен, я вижу вышеуказанные ошибки, и я действительно не могу понять, почему, поэтому моей первой задачей было перезаписать эти заголовки, фактически используя это промежуточное программное обеспечение.
Когда я добавляю промежуточное программное обеспечение Illuminate\Http\Middleware\FrameGuard.php
, которое содержит приведенный ниже код, кажется, ничего не меняется:
public function handle($request, Closure $next)
{
$response = $next($request);
$response->headers->set('X-XSS-Protection', '1; mode=block');
$response->headers->set('Content-Type','text/html; charset=UTF-8');
$response->headers->set('X-Frame-Options', 'SAMEORIGIN', true);
return $response;
}
Я также использую Socialite, который обеспечивает аутентификацию на Facebook. Есть ли вероятность, что он изменяет какие-либо заголовки?
1 answers
Веб-сервер может добавлять заголовки к ответам в дополнение к тем, которые отправляются PHP. Мы можем проверить, какие заголовки добавляет веб-сервер, создав пустой HTML-файл в общедоступном каталоге , например public/dummy.html
Затем посетите эту страницу в браузере, http://example.com/dummy.html , и проверьте, какие заголовки содержит ответ. В качестве альтернативы мы можем использовать команду curl для отображения заголовков ответов:
$ curl -I 'http://example.com/dummy.html'
HTTP/2 200
date: Mon, 16 Oct 2017 20:34:24 GMT
...
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
Опция -D
сбрасывает заголовки в файл. В этом случае мы указываем -
в качестве файла для отправки вывода через стандартный вывод на терминал.
Если мы видим заголовки x-xss-protection
или x-frame-options
в этом выводе, это означает, что веб-сервер отправляет эти заголовки. В конфигурации веб-сервера может быть повреждено значение x-xss-protection
(похоже, что кто-то вставил стилизованные двойные кавычки (“…”
) вместо прямых кавычек ("…"
), которые сервер интерпретируется как часть значения заголовка).
Для nginx найдите директивы add_header ...
в файлах конфигурации. Если используется Apachehttpd, проверьте наличие директив Header set ...
в конфигурации сервера или файле .htaccess.
Также похоже, что сайт использует CDN Incapsula, который также может вводить заголовки, но я не смог найти никакой информации в документации Incapsula, которая предполагает, что это так.
Светская львица Ларавель не добавляет эти заголовки в ответы.