Параметры 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. Есть ли вероятность, что он изменяет какие-либо заголовки?

Author: Cy Rossignol, 2017-10-04

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, которая предполагает, что это так.

Светская львица Ларавель не добавляет эти заголовки в ответы.

 4
Author: Cy Rossignol, 2017-11-13 23:52:14