phpbar.de logo

Mailinglisten-Archive

[php] Cross-Site-Scripting (XSS) Schutz mit PHP

[php] Cross-Site-Scripting (XSS) Schutz mit PHP

Johann-Peter Hartmann php_(at)_phpcenter.de
Thu, 10 Oct 2002 21:23:57 +0200


Hi Ivan,

Ivan Schmid schrieb:
> Als Schutz vor möglichen Cross-Site-Scripting (XSS) Angriffen
> auf unsere
> Web-Applikation möchte ich im Header auf jeder Site ein
> Schutz einbauen.
> Betroffen davon sind eigentlich alle möglichen Header
> Eingaben.( Get, Post,
> Cookie, Session, Put ).
>
> $_ENV, $_GET, $_POST, $_COOKIE, $_SERVER, $_SESSION

	Meist entscheidet man über die
	Vertrauenswürdigkeit von HTTP-Daten
	nicht nur anhand des Headers und dem
	Dateninhalt, sondern vor allem über die
	Authentizität der Verbindung und die
	Plausibilität des Inhalts.

	Dh. es sollte feststehen, dass es sich
	um den gewünschten Nutzer handelt,
	die Inputdaten sollten auf einen
	plausiblen Zustandsraum beschränkt werden,
	z.B. über reguläre Ausdrücke oder
	andere Inhaltsvergleiche wie <= usw.

	Daneben sollten natürlich nur die Daten
	Vertrauensgrenzen überschreiten, bei denen
	es tatsächlich notwendig ist.


> 1. Die Frage:
> ***************
> Wie könnte ich nun am einfachsten und schnellsten alle diese Variablen
> checken und durch die Funktion make_clean säubern ?
> Was sollte die Funktion make_clean sonst noch alles checken?

	Alles über einen Kamm zu scheren ist
	imho unklug, weil man dann den größten
	gemeinsamen Nenner benutzen muss.
	Statt dessen sollte man Zahleneingaben auf
	Ziffern überprüfen, SQL-Parameter auf
	SQL-Escapes, HTML-Input auf gültige Tags,
	Strings auf maximale Längen usw. .

> ***************
> 2. Mein Vorschlag:
> ***************

	Parameter zum späteren Anzeigen begrenzt
	man für gewöhnlich mit strip_tags.


> 3. Das Problem:
> ***************
> Wenn es nun keine _GET oder sonstwelche Variable gibt, kommt
> es zu einem
> Parse-Error in der htmlspecialchars Funktion.
^
	Hmm, das verstehe ich nicht, foreach
	sollte bei leeren Arrays die Funktion
	nicht aufrufen.


> Wenn eine _GET oder sonstwelche Variable nicht ein String
> sondern ein Array
> ist kommt es auch zu einem Parse-Error.
> Die Extract-Funktion für Arrays möchte ich erst nach dem make_clean
> verwenden.

	Kann man dann die Array-Inhalte
	injecten, weil die erst nach dem
	make_clean rausgeholt werden :o) ?

> Für gute Verbesserungsvorschläge wäre ich sehr dankbar.

1.	Mit dem Wissen um die möglichen
	Inhalte der Variablen diese prüfen.

2. 	Stefan Esser (http://security.e-matters.de/)
	zur Beratung einkaufen ;-) .


	Liebe Grüße,
	-johann

	Mayflower GmbH
	Raumpfleger


php::bar PHP Wiki   -   Listenarchive