Mailinglisten-Archive |
Sebastian Mendel wrote: > Yannik Hampe schrieb: >> Sebastian Mendel wrote: >>> schon gelesen? >>> >>> http://www.hardened-php.net/hphp/zend_hash_del_key_or_index_vulnerability.html >>> >>> >>> so auf die schnelle würde mir einfallen einfach alle Anfragen mit einer >>> Zahl als Namen abzulehnen, oder? >>> >> *les* >> Interessanter Bug... >> Also ja... Meines Erachtens müsste sowas schützen: >> if (preg_match('/[?&][-]{0,1}\d+=/',$_SERVER['REQUEST_URI'])) >> exit('Irgendeine Fehlermeldung'); >> (Code by Yannik Hampe, with 14-days-money-back guarantee... Use at your >> own risk...) > > und was ist mit ; anstelle von ? > und mit POST und COOKIE? Tjo, stimmt... Also vielleicht doch besser: foreach(get_defined_vars() as $key =>$v) if (is_numeric($key)) exit('nö'); > > script.php?var=1;123=fake > > Wie es ja schon seit Jahren vom W3C empfohlen wird und auch verwendet wird. Das ist mir aber neu. Und mein Apache nimmt auch nur &. Im Zweifelssfall wäre mein regex aber schnell umgeschrieben und die foreach-Schleife sollte es in jedem Fall bringen :-). > > ein is_numeric über die $_REQUEST keys wäre wohl am praktischsten ... Meine Version mit get_defined_vars gefällt mir aber noch besser. Denn wenn Register Globals aus sind, dann sollte es schneller gehen. Wobei man natürlich mit einem ini_get auch einfach prüfen kann, ob register_globals an sind und die Prüfung ggf. wegfallen lassen kann. Wenn man noch Arrays im Request verwendet, ist vielleicht ein rekursiver check auch ganz nützlich: array_walk_recursive($_REQUEST,create_function('$a,$b','if (is_numeric($a)) exit("nö");')); > >> Ansonsten kann man natürlich auch einfach bestimmten Code vermeiden. Zum >> Beispiel "deren" Beispielcode: >> >> [...] > > Da gibt es auch wesentlich verbreiterten Code wo das zutrifft, der > gezeigte war wohl nur der kürzeste. Das heisst ja nicht, dass man solchen Code bei seinen eigenen Projekten nicht vermeiden kann. Ich halte es eh für fraglich, ob es eine gute Idee ist die unset-Funktion auf diese Weise zu nutzen. Es erhöht nämlich nicht gerade die Lesbarkeit des Codes, wenn irgendwo am Anfang einer php-Datei bestimmte Variabeln geunseted werden, auf die dann wo ganz anders wieder zugegriffen wird. > > Besonders da man ja nicht garantieren kann das auf allen Systemen > register_globals=off ist. Nö, aber darum geht es ja gerade. Systeme, auf denen register_globals=off sind, sind ja sowieso nicht betroffen. Yannik
php::bar PHP Wiki - Listenarchive