seth_not@home: Sicherheitslücke in sehr vielen regulären Ausdrücken

Beitrag lesen

gudn tach!

$absender = preg_replace( "/[^a-z0-9 !?:;,./_-=+@#$&*()]/im", "", $_POST['absenderemail'] );


> Wieso wird $absender im Header später noch richtig ausgegeben, wenn doch das @-Symbol als Zeichen in der Funktion angegeben ist?  
  
^ als erstes zeichen innerhalb einer zeichenklasse negiert die zeichenklasse.  
  
/[^abc]/ heisst also "ein zeichen, dass weder 'a' noch 'b' noch 'c' ist".  
  
abgesehen davon ist das "bereinigen", wie es [dr. web](http://www.drweb.de/webmaster/kontakt-formulare.shtml) vorschlaegt, nicht immer sinnvoll. beachte dazu den kommentar [#6.1 im genannten blog](http://blog.php-security.org/archives/76-Holes-in-most-preg_match-filters.html#c7186).  
  
ich denke zwar - entgegen Stefan Esser -, dass bei e-mail-adressen z.b. in einem formular nichts dagegen spricht, einen etwaigen abschliessenden zeilenumbruch einfach zu entfernen, aber automatisch alle "meistens-verbotenen" zeichen zu entfernen (wie es dr. web vorschlaegt), ist imho eine zu naive vorgehensweise.  
  
prost  
seth