O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

45
3 Parametermanipulation
Fast alle Angriffe erfolgen über eine Art von Parametermani-
pulation, also die Veränderung von Parametern, die an die
Webanwendung geschickt werden. In diesem Kapitel erfahren
Sie mehr über die verschiedenen Arten der Parametermanipu-
lation und entsprechende Gegenmaßnahmen.
3.1 Grundlagen
Austausch von
Parametern zwischen
Client und Server
Der Datenaustausch zwischen Client und Server basiert auf dem Aus-
tausch von Parametern; im Detail bedeutet dies, dass die Kommunika-
tion zwischen den beiden Kommunikationspartnern auf dem Request-
Response-Prinzip basiert. Als Übertragungsprotokoll dient hierfür das
HTTP-Protokoll, das in RFC 2616
1
definiert ist. Diese HTTP-Anfra-
gen können aus mehreren Teilen bestehen.
Der HTTP-Header-Teil enthält beim Request Steuerinformationen
und Angaben über den Client. Bei einer Response ist hier der Status-
code des Servers und eine Angabe zum Cache-Verhalten des Browsers
zu finden. Der HTTP-Body-Teil enthält Daten, die beim Request vom
Client an den Server oder bei einer Response vom Server an den Client
geschickt werden.
Ein Request wird vom Client initiiert, z.B. indem Sie eine URL in
der Adressleiste Ihres Browsers eingeben. Der Browser nimmt diese
Eingabe entgegen und erstellt den HTTP-Request, der wie folgt ausse-
hen kann:
GET /index.php?param=1 HTTP/1.1
Host: www.php-sicherheit.de
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12)
Gecko/20050920 Firefox/1.0.7
1. http://www.faqs.org/rfcs/rfc2616.html
3 Parametermanipulation46
Accept: text/xml,application/xml,application/xhtml+xml,text/
html;q=0.9,text/plain;q=0.8,i mage/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
In der ersten Zeile sehen wir die Methode, also die Art der Anfrage.
Die GET-Methode trifft man am häufigsten an, denn jeder Aufruf
eines Links in einer HTML-Seite oder die Eingabe einer URL in der
Adressleiste löst einen GET-Request aus. Nach der Methode und der
URL mitsamt der Parameter folgt die Angabe über die verwendete
HTTP-Version und in der zweiten Zeile steht der Host, an den die
Anfrage gerichtet ist. Danach folgen Angaben über den Client, wie z.B.
der User-Agent oder die unterstützten Zeichensätze des Clients.
Bei der Methode POST könnte die HTTP-Anfrage so aussehen:
POST /index.php HTTP/1.1
Host: www.php-sicherheit.de
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12)
Gecko/20050920 Firefox/1.0.7 SUSE/1.0.7-0.1
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Cookie: sid=c456f0469051414d0f239621c215070f
Content-Type: application/x-www-form-urlencoded
Content-Length: 7582
submit=41C81F1785858947C41D1E24A8287B6D&rec_id=41&tree_id=3&rec
_tan=11291126[...]
Bei diesem POST-Request stehen die Daten, die aus einem Formular
mit dem Attribut
method="post" an den Server übermittelt werden, im
Body-Teil des HTTP-Pakets.
Der Server nimmt dieses Paket entgegen und versucht, die pas-
sende Datei aus seinem Dateisystem zu laden. Geschieht das erfolg-
reich, entnimmt nun der Server seiner Konfiguration, dass er Dateien
mit der Endung
.php an den PHP-Interpreter weitergeben muss. Dieser
führt den enthaltenen PHP-Code aus und gibt die Ausgabedaten
zurück an den Webserver. Der Server generiert ein neues HTTP-Paket,
die Response, und schickt diese zurück an den Client. Das Paket kann
so aussehen:
473.1 Grundlagen
HTTP/1.x 200 OK
Date: Wed, 12 Oct 2005 09:30:30 GMT
Server: Apache
X-Powered-By: PHP/5.0.5
Vary: Accept-Encoding,User-Agent
Set-Cookie: PHPSESSID=l4ghv8o1tt2g0e343kr59tjue4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Pragma: no-cache
Content-Encoding: gzip
Content-Length: 7156
Content-Type: text/html; charset=ISO-8859-1
<html> <!-- Hier steht der HTML-Code --> </html>
In der ersten Zeile steht der Statuscode des Webservers. »200« bedeu-
tet »OK«, die Seite wurde gefunden. Konnte der Webserver die Datei
nicht aus dem Dateisystem laden, steht dort ein Statuscode »404« für
»Seite nicht gefunden«. Es folgt das Datum der Response (Date),
Angaben über den Server (Server) und den PHP-Interpreter (X-Powe-
red-By). Mit den Angaben in den darauf folgenden Zeilen kann das
Cache-Verhalten des Browsers beeinflusst und z.B. ein erneutes Anfor-
dern der Seite vom Server anstelle der Nutzung des internen Browser-
Caches angewiesen werden, falls der Benutzer die Seite neu lädt. Es fol-
gen Content-Angaben wie der verwendete Zeichensatz oder die Länge
des enthaltenen Contents. Am Ende des Pakets steht nun schließlich
der Content, also der HTML-Code, der vom Browser interpretiert und
angezeigt wird.
Cookie-Speicherung
Die Header-Angaben Set-Cookie in der Response des Servers wei-
sen den Client an, ein Cookie für diese Domain zu speichern und dieses
bei jedem Request wieder an den Server zu senden. Das Cookie kann
entweder sessionbasiert bis zum Schließen des Browsers oder perma-
nent für eine bestimmte Zeit vom Client gespeichert werden.
Werkzeuge zur
Request-Erzeugung
Ein Angreifer kann nun die Parameter in den Paketen mithilfe
eines Proxys, der zwischen Client und Server geschaltet wird, mit
selbst geschriebenen Werkzeugen oder mit einem entsprechend aufge-
rüsteten Browser beliebig verändern. So kann das Verhalten der Appli-
kation oder Webseite beeinflusst werden. Die Angriffe können zu Ver-
änderungen an der Webseite, zum Auslesen von sensiblen Daten oder
zur Änderung von Daten aus einem Datenspeicher wie z.B. einer
MySQL-Datenbank führen.
SSL ist hier kein Schutz.
Eine SSL-Verschlüsselung bietet zwar Schutz gegen das »Mithö-
ren« der HTTP-Pakete, dennoch werden die Daten lokal auf dem Ser-
ver oder dem Client entschlüsselt, um diese zu interpretieren. Das
bedeutet, dass die Daten durch eine SSL-Verschlüsselung nicht vali-

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required