Format der HTTP-Anfrage
1) Informationen anfordern: Beispiel: „Get /index.php HTTP/1.1“, Datei index.php anfordern
2) Header: Beispiel: „Host: localhost“, Angabe der Serveradresse
3) Leerzeile
4) Informationstext
Sowohl „Informationen anfordern“ als auch „Header“ müssen Zeilenumbruchzeichen verwenden ( CRLF) Am Ende darf eine Leerzeile nur Zeilenumbrüche und keine anderen Leerzeichen enthalten.
Das folgende Beispiel sendet eine HTTP-Anfrage an den Server www.yhsafe.com
GET /index.php HTTP/1.1↙ //Informationen anfordern
Host:www. yhsafe.com ↙ //Kopfzeile
↙ //Die Leerzeile
↙
↙ Symbol stellt die Eingabetaste dar. Nach der Leerzeile müssen Sie eine Leertaste drücken Senden Sie eine HTTP-Anfrage. Von den HTTP-Anfrageheadern ist nur der Host-Header erforderlich, und die restlichen HTTP-Header werden basierend auf dem Inhalt der HTTP-Anfrage bestimmt.
HTTP-Anfragemethode
1) GET: Antwort anfordern
2) HEAD: Die gleiche Antwort wie GET, nur der Antwortheader ist erforderlich
3) POST: Daten zur Verarbeitung an den Server senden, die Daten sind im HTTP-Nachrichtentext enthalten
4) PUT: Dateien hochladen
5) DELETE: Dateien löschen
6) TRACE: Empfangene Anfragen verfolgen
7) OPTIONEN: Vom Server unterstützte HTTP-Anfragemethoden zurückgeben
8) CONNECT: HTTP-Anfrageverbindungen in transparentes TCP/IP umwandeln Kanal
HTTP-Antwortformat
Nachdem der Server die vom Client gestellte HTTP-Anfrage verarbeitet hat, sendet er die folgende Antwort.
1) Die erste Zeile ist der Statuscode
2) Die zweite Zeile beginnt mit anderen Informationen
Der Statuscode enthält eine Zahl, die den Status identifiziert, und ein Wort, das beschreibt den Status. Beispiel:
HTTP/1.1 200 OK
200 ist eine Zahl, die den Status identifiziert, und OK ist ein Wort, das den Status beschreibt. Dieser Statuscode zeigt an, dass die Anfrage erfolgreich ist.
Beispiele für HTTP-Anfragen und -Antworten
Öffnen Sie cmd und geben Sie telnet ein, geben Sie open www.00aq.com 80 ein
Öffnen Sie die Verbindung und geben Sie
GET ein /index .php HTTP/1.1↙
Host:www.00aq.com↙
↙
↙
HTTP-Antwort-Header zurückgeben
Zurückgegebener Homepage-Inhalt
Mit PHP HTTP-Anfragen senden
Die Header-Funktion kann zum Senden von HTTP verwendet werden Anfragen Und der Antwortheader
Funktionsprototyp
void header(string string [, bool replacement [, int http_response_code]])
string ist der String des HTTP-Headers
Wenn „replace“ TRUE ist, bedeutet dies, dass der vorherige ähnliche Header durch den aktuellen Header ersetzt wird. Wenn „replace“ FALSE ist, bedeutet dies, dass mehrere ähnliche Header verwendet werden.
http_response_code Wird verwendet erzwingen, dass der HTTP-Antwortcode den Wert von http_response_code verwendet
Beispiel:
// Internet-Socket-Verbindung öffnen
$fp = fsockopen(www.00aq.com, 80); > // HTTP-Anforderungsheader schreiben
fputs($fp, "GET / HTTP/1.1rn");
fputs($fp, "Host: www.00aq.comrnrn"); Antwortzeichenfolge
$http_response = "";
while (!feof($fp))
{
// 256-Bit-HTTP-Antwortzeichenfolge lesen
$http_response fp, );
}
// Internet-Socket-Verbindung schließen
fclose($fp);
// HTTP-Antwortinformationen anzeigen
echo nl2br(htmlentities($http_response) ; , wodurch die Der Zielbenutzer verwendet eine Anforderung, um zwei Antworten zu generieren. Die erste Antwort ist die Antwort des Servers und die zweite ist die vom Angreifer entworfene Antwort. Dieser Angriff erfolgt, weil das WEB-Programm Benutzerdaten im HTTP-Antwortheader platziert und diese Benutzerdaten vom Angreifer sorgfältig entworfen wurden.
Zu den Funktionen, die unter der HTTP-Antwortaufteilung leiden können, gehören:
header(); setrawcookie();
HTTP-Antwortaufteilung Kommt normalerweise vor in:
Location-Header: schreibt die Daten des Benutzers in die umgeleitete URL-Adresse
Set-Cookie-Header: schreibt die Daten des Benutzers in Cookies
Beispiel:
header("Location: " . $_GET['page']);Request
GET /location.php? page=http://www.00aq.com HTTP/1.1↙
Host: localhost↙
↙
Return
Datum: Mi, 13. Januar 2010 03:44:24 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP /5.2.6
Standort: http://www.00aq.com
Inhaltslänge: 0
Keep-Alive: Timeout=5, max=100
Verbindung: Keep-Alive
Content-Type: text/html
Greifen Sie auf den Link unten zu, ein Anmeldefenster wird direkt angezeigt
http:// localhost/location.php?page=%0d%0aContent-Type:%20text/html%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%20158% 0d%0a%0d%0aAccount%20Password%20
wird in eine lesbare Zeichenfolge umgewandelt:
Content-Type: text/html
HTTP/1.1 200 OK
Inhaltstyp: Text/HTML
Inhaltslänge: 158
Konto
Passwort
Ein HTTP Anfrage generierte zwei Antworten
Präventionsmethode:
1) Ersetzen Sie das CRLF-Neuzeilenzeichen
header("Location: " . strtr($_GET[' page'], array ("r"=>"", "n"=>"")));
?>
2) Verwenden Sie die neueste Version von PHP
HTTP-Antwortheader ausblenden
httpd. conf in Apache, Option ServerTokens = Prod, ServerSignature = Offphp.ini in PHP, Option Exposé_php = Off Das Obige ist die vollständige Lösung für PHP-Schwachstellen (8)-HTTP Als Antwort Für den Inhalt der Aufteilung beachten Sie bitte die chinesische PHP-Website (www.php.cn), um weitere verwandte Inhalte zu erhalten!