2017-10-04 4 views
8

Ich versuche, meine Header zu beheben. Ich sehe zwei Fehler, wenn die Netzwerk-Anfragen zu überprüfen, wie ich meine Seite besuchen:X-FRAME-OPTIONS wird zweimal angezeigt und X-XSS-PROTECTION wird falsch angezeigt

1) X-FRAME-OPTIONS: SAMEORIGIN wird zweimal gezeigt:

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) Ich kann den folgenden Fehler auf der Konsole für X-XSS-PROTECTION sehen:

Fehler beim Parsen der Kopfzeile X-XSS-Schutz: â1; mode = blockâ: erwartete 0 oder 1 bei Zeichenposition 0. Die Standardschutzfunktionen werden angewendet.

Ich benutze Laravel 5.0. Die Middleware FrameGuard.php ist seit Laravel 4.2 nicht standardmäßig aktiviert, Sie können sie jedoch bei Bedarf aktivieren. Wenn es deaktiviert ist, sehe ich die oben genannten Fehler und ich kann wirklich nicht verstehen, warum, also war meine erste, diese Überschriften zu überschreiben, tatsächlich diese Middleware verwendend.

Wenn ich die Illuminate\Http\Middleware\FrameGuard.php Middleware hinzufügen, die den Code unten enthält, scheint nichts zu ändern:

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; 
} 

Ich benutze Socialite auch die Facebook-Authentifizierung bietet. Gibt es eine Chance, dass es Header ändert?

+1

Haben Sie die Middleware-Priorität festgelegt, sodass Ihre Middleware als letzte bezeichnet wird? Und Sie können wahrscheinlich debuggen, wenn die beschädigten Header bereits vorhanden sind, wenn Sie die Antwort in Ihrer Middleware erhalten. Auch wenn ich 'decodeURIComponent ("% E2% 80% 9C1 ") =" "1" 'benutze. Dies bedeutet, dass der Fehler wahrscheinlich nur von Ihnen eingeführt wurde, indem Sie ein intelligentes Zitat anstelle eines normalen Zitats verwenden. Haben Sie Code aus dem Web oder einem Word-Dokument kopiert? Außerdem können Sie mit 'grep -r" "" erkennen, welche Datei das intelligente Zitat hat. " –

+0

Irgendwelche Updates dazu? –

Antwort

4

Der Webserver kann zusätzlich zu den von PHP gesendeten Antworten Header zu Antworten hinzufügen. Wir können prüfen, welche Header den Webserver fügt durch eine leere HTML-Datei im öffentlichen Verzeichnis erstellen, wie public/dummy.html

Dann besuchen Sie die Seite im Browser, http://example.com/dummy.html, und prüfen Sie, welche den Headern Antwort beinhaltet. Alternativ können wir die curl Befehl verwenden, um die Antwort-Header zu zeigen:

$ 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 

Die -D Option die Header in eine Datei Dumps. In diesem Fall geben Sie - als Datei an, um die Ausgabe über STDOUT an das Terminal zu senden.

Wenn wir die Header x-xss-protection oder x-frame-options in dieser Ausgabe sehen, bedeutet dies, dass der Webserver diese Header sendet. Es kann einen beschädigten Wert für x-xss-protection in der Webserverkonfiguration geben (es sieht so aus, als ob jemand stilisierte doppelte Anführungszeichen (“…”) anstelle von geraden Anführungszeichen eingefügt hat ("…"), die der Server als Teil des Headerwerts interpretiert).

Für nginx, suchen Sie in den Konfigurationsdateien nach add_header ... Direktiven. Wenn Sie Apache httpd verwenden, überprüfen Sie die Header set ... Direktiven in der Serverkonfiguration oder .htaccess Datei.

Es scheint auch, als ob die Website die Incapsula CDN verwendet, die auch die Header injiziert, aber ich konnte keine Informationen in der Incapsula-Dokumentation finden, die darauf hindeuten, dass dies der Fall ist.

Laravel Socialite fügt diese Header nicht zu Antworten hinzu.

+0

Nur eine kleine Bemerkung - warum nicht nur locken -v statt aller vorgeschlagenen Fahnen? –

+0

@Denis - Guter Punkt! Sicherlich weniger tippen. Ich habe den obigen curl-Befehl für die Relevanz gewählt, weil er nur * Response-Header ausgibt. Zum gelegentlichen Debuggen sollte beides funktionieren. –

Verwandte Themen