Ist es sinnvoll bzw. angebracht POST-Daten auch nach einer Überprüfung durch Regex mit htmlentities usw unschädlich zu machen? Theoretisch dürfte ja bei geregexten Daten nichts mehr dabei sein, was schaden könnte.
keine Ahnung, was du mit "usw" meinst aber htmlentities prüft überhaupt nichts und hat auch erstmal nichts mit eingehenden Daten zu tun sondern mit der Ausgabe im HTML-Kontext.
Theoretisch dürfte ja bei geregexten Daten nichts mehr dabei sein, was schaden könnte.
Das jedenfalls ist eine Pauschalaussage, die so nicht stimmt.
und trotzdem sollten diese Daten per mysql__real_escape_string bzw deren Entsprechung bei deiner Datenbank-Erweiterung oder als prepared Statement automatisch Escaped geschrieben werden ....
hat auch erstmal nichts mit eingehenden Daten zu tun sondern mit der Ausgabe im HTML-Kontext.
Du sprichst davon, eingehende Daten zu "entschärfen", ohne den Kontext zu erwähnen, also muss ich davon ausgehen, dass du einfach pauschal auf alles htmlentities anwendest. Das macht Sinn, wenn die Variablen in HTML ausgegeben werden und sonst nichts. Insbesondere solltest du keine HTML Entities in einer Datenbank speichern, es sei denn das ganze Datenfeld ist tatsächlich HTML, beispielsweise ein formatierter Blog-Post.
Stichwort Email-Adressen. Valide Adressen können auch "<" und ">" enthalten*, müssen also bei der Ausgabe in HTML mit htmlspecialchars behandelt werden, damit sie überhaupt korrekt dargestellt werden, XSS hin oder her.
*) weshalb dein regulärer Ausdruck auch keine gute Idee ist, der lehnt noch viel mehr valide Emailadressen ab. Wir hatten das Thema kürzlich noch hier, dass Emailadressen lieber zu locker als zu strikt validiert werden sollten (strpos($email, '@') ist IMHO schon ausreichend). Oder nutze zumindest [man]filter_var[/man], da passiert zwar intern auch eine Regex-Validierung, aber mit einem unglaublich komplexen Ausdruck, der zumindest sehr nah am RFC ist und nur sehr spezielle Sonderfälle nicht abdeckt.
Nein, ich meine "email-adressen in Anführungszeichen können <Sonderzeichen> enthalten"@example.com (Wikipedia)
Für mysql_real_escape_string gilt das selbe was ich oben geschrieben habe, es kommt auf den Kontext an. Also bitte nur dann anwenden, bevor die Variable in mysql_query verwendet wird.
< > weiß ich jetzt nicht .. aber schau dir mal IPv6 an .. und gültige Email-Adressen müssen ja nicht ne Domain umfassen, sondern dürfen auch eine IP-Adresse enthalten
info@::1 ... und dann schau mal was dein regex dazu sagt
Vorschlag - schau mal über den Tellerrand zu anderen "Diensten" mit Emails ... du gibst die email-Adresse ein (teils sogar 2mal) und was kommt dann ? Genau "ihr account wurde angelegt, um ihn zu aktivieren haben wir ihnen eine Email zugesendet. Bitte klicken sie auf den Aktivierungs-Link in der Email ..." Das ist nichts anderes als eine Email-Validierung auf die "Brute Force-Methode" - wenn du die Email von denen bekommst, dann ist die Email korrekt (und kann für Werbezwecke verkauft werden - aber darum geht es ja hier nicht)
das liegt nur daran, dass sich Europa speziell Deutschland noch sehr zögerlich gibt bei der vollflächigen Einführung von IPv6 - andere Länder mussten da schon vorbauen (Südkorea, Taiwan, teilweise Japan und Stadtstaaten (Hong Kong / Singapur) ) - diesse Länder hatten schon relativ zeitig (so vor 5 Jahren) so massive Probleme mit den zur Verfügung stehenden IPv4 Adresspools, dass dort zwangsläufig IPv6 genutzt werden musste...
Kommentar