Warum bekomme ich 400 schlechte Anfragen?


8

Ich habe gerade die Einrichtung eines Servers in AWS ECS abgeschlossen.

Alle Konfigurationen sind identisch mit einem anderen Server, mit Ausnahme der Apache-Version (von 2.2 bis 2.4) und der PHP-Version (von 5.3 bis 5.6).

Ich habe meine index.php-Datei so geändert, dass nur php_info () ausgedruckt wird, aber ich erhalte immer wieder:

Ungültige Anforderung

Ihr Browser hat eine Anfrage gesendet, die dieser Server nicht verstehen konnte. Außerdem ist beim Versuch, ein ErrorDocument zur Bearbeitung der Anforderung zu verwenden, ein Fehler mit 400 fehlerhaften Anforderungen aufgetreten.

Apache / 2.4.25 (Amazon) Server unter xxx.yyy.com Port 80

Ich habe mir alle Protokolle angesehen, die von meinen Zugriffen gespeichert wurden, und dies ist, was ich von diesem bestimmten Zugang erhalte:

Fehlerprotokoll

[Tue Jan 24 16:20:46.154208 2017] [suexec:notice] [pid 32139] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Tue Jan 24 16:20:46.249527 2017] [auth_digest:notice] [pid 32146] AH01757: generating secret for digest authentication ... 
[Tue Jan 24 16:20:46.250415 2017] [lbmethod_heartbeat:notice] [pid 32146] AH02282: No slotmem from mod_heartmonitor 
[Tue Jan 24 16:20:46.276823 2017] [mpm_prefork:notice] [pid 32146] AH00163: Apache/2.4.25 (Amazon) OpenSSL/1.0.1k-fips configured -- resuming normal operations 
[Tue Jan 24 16:20:46.276840 2017] [core:notice] [pid 32146] AH00094: Command line: '/usr/sbin/httpd'

access_log

90.152.127.182 - - [24/Jan/2017:16:21:03 +0000] "GET / HTTP/1.1" 400 437 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
90.152.127.182 - - [24/Jan/2017:16:21:04 +0000] "GET /favicon.ico HTTP/1.1" 400 437 "http://xxx.yyy.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

ssl_access_log

90.152.127.182 - - [24/Jan/2017:16:12:24 +0000] "GET / HTTP/1.1" 400 434 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
90.152.127.182 - - [24/Jan/2017:16:12:25 +0000] "GET /favicon.ico HTTP/1.1" 400 434 "https://xxx.yyy.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

Was könnte meinen 400er Status verursachen? Bevor Sie fragen, habe ich mod_ssl installiert, ja.


Erfassen Sie die Anfrage und sehen Sie sie sich an. Vorzugsweise sowohl Client- als auch Serverseite. Der trivialste Punkt könnte sein, dass sie unterschiedlich sind.
gro♀

Antworten:


17

Stellen Sie sicher, dass Ihre virtuellen Hosts keine illegalen Zeichen enthalten ServerName.

Ich bin auf dieses Problem gestoßen, als ich "sub_domain.test.com" von Apache 2.2 auf 2.4 migriert habe.

Der Unterstrich in "sub_domain" veranlasste Apache 2.4, mit, 400 (Bad Request)aber ohne weiteren Hinweis im Fehlerprotokoll zu antworten .

Schauen Sie sich auch /programming/2180465/can-domain-name-subdomains-have-an-underscore-in-it an


1
Das war es für mich. Ich habe mit einem Apache httpd Docker Apline Container gearbeitet. Und ich konnte keine Dateien herunterladen, wenn ich den Hostnamen httpd_filesver_7003 verwendete. Sogar von innerhalb der Maschine. Beim Versuch, die Dateien mit localhost herunterzuladen, kein Problem. Ich habe jetzt den Hostnamen des Computers in httpd.fileserver.7003 umbenannt und das Problem behoben. Es ist äußerst ärgerlich, dass das ERRO-LOG keine relevanten Informationen über die "Ursache" einer schlechten Anfrage
gemeldet hat

wo warst du @Chris? Ich habe eine Woche wegen dieses Unterstrichs gekämpft. (Übrigens bin ich auf Windows 10, Xampp)
Shyammakwana.me

3

Ich habe das gleiche Problem. Ich vermute, dass dieses Update enthalten war: CVE-2016-8743 Erzwingen Sie die HTTP-Anforderungsgrammatik entsprechend RFC7230 für Anforderungszeilen und Anforderungsheader, um die Aufteilung der Antworten und die Verschmutzung des Caches durch böswillige Clients oder nachgeschaltete Proxys zu verhindern.


Der RFC7230-Fehler war Mozillas Fehler, dh es ist die Firefox-Entwicklung und 51.0, die die fehlerhafte HSTS-Priming-Anforderung sendet. Die User-Agent:Zeichenfolge in der Frage von OP deutet jedoch auf eine Anfrage von Chrome hin.
gro♀

1
Ich hatte gerade einen Techniker auf meinem Apache-Techniker, der HttpProtocolOptions zum Testen unsicher hinzufügte, und die Anfrage ging durch. Meine Anfrage war ein openssl GET / HTTP / 1.1 (Simulation des F5 Heath Check Monitors)
user7400387

1
Oh ok. Sie schlagen vor, dass Apache bei der Behebung dieses CVE Fehler gemacht hat. Es ist ein gültiger Punkt (+1).
Grogust

Mein Problem wurde behoben. Ich stellte fest, dass vor Apache 2.4.25 angeforderte Leerzeichen mit größerer Nachsicht behandelt wurden. Mein F5-Ingenieur hatte ein Leerzeichen zwischen HTTP / 1.1 und CRLF. In der F5-Welt sieht es so aus: GET / HTTP / 1.1 \ r \ nHOST: test.com \ r \ nVerbindung: close \ r \ n \ r \ n Das Leerzeichen zwischen HTTP / 1.1 und \ r \ nHost war das Problem die Anfrage nicht konform. Vorherige Version von Apache war dies erlaubt.
user7400387

Ich stoße auch auf diesen Fehler. In meiner Anfrage ist auch kein zusätzlicher Platz; Ich bin mir verdammt sicher, dass es ein Fehler in Apache ist, aber es ist seltsam, dass niemand es bemerkt hat. Am Ende habe ich ein Downgrade auf Apache 2.2 durchgeführt, um das Problem zu beheben.
user541686
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.