Mailinglisten-Archive |
Das Problem, dass mit ungeprueften Eingaben Hackerangriffe moeglich sind, bezieht sich AFAIK auf alle Strings, die mit system() oder popen() (usw. ?) dem Betriebssystem (genauer: einer Shell) uebergeben werden. Das senden von Mail sollte mit mail() eigentlich sicher sein. Ich will an dem Beispiel aber mal ankuepfen und sendmail selbst aufrufen. Das geht im Prinzip etwa so: if (isset($email)) system("sendmail " . $email); Wenn sich eine email-Adresse in $email befindet ist das ja noch gut. Es ist aber genauso möglich, an die email-adresse weiteres anzuhaengen, zB.: $email="noo_(at)_uni-jena.de ; rm -rf ." Der Systemaufruf bekommt damit das Aussehen system("sendmail noo_(at)_uni-jena.de ; rm -rf .") Es werden damit _zwei_ Kommandos uebergeben, die die Shell dann ausfuehrt. Der Webmaster kann dann nur hoffen, dass der httpd nicht zu viele Rechte besitzt :-) Es ist schwer, allgemein zu sagen, wie ein vorgesetztes Filter aussehen muss. Ausser dem ';' gibt es ja auch noch die Möglichkeiten '&&', '||' bei der bash, was bei den verschiedenen Shells sonst noch geht, weiss ich nicht. Meist duerfte es besser sein, nicht zu fragen, was nicht sein darf, sondern umgekehrt nur das zulassen, was die jeweilige Eingabe erwartet. Bei der Email-Adresse waere einer der schon genannten regulaeren Ausdruecke sicher geeignet (Auch wenn mail() das wahrscheinlich auch testet). mit freundlichen Gruessen, Wolfgang -- Wolfgang Ortmann Digital Image Processing Group Uni Jena, Fak. f. Mathematik und Informatik, 07740 Jena http://pandora.inf.uni-jena.de/
php::bar PHP Wiki - Listenarchive