Eingabefelder vor Codeeinspeisung schützen

Hallo Leute,

würde mich mal interessieren wie ich meine Eingabefelder (Input,Textarea, etc.) vor HTML-Code oder fremder Codeeinspeisung wie JavaScript schützen kann. Gibt es da schon Funktionen die mir evtl. helfen könnten? Oder habt ihr ein paar Ideen?

Ein aktueller Pfall ist ja gerade bei ebay aufgetaucht mit der Einspeisung eines JavaScriptes um die Bewertungsanzeige zu manipulieren....

Wäre euch für Ratschläge dankbar.
 
Hier mal ne kleine Funktion die vor allem auch SQL-Injections rausfiltert:

PHP:
function conv2DB($myString) {
     $myString = stripslashes($myString);
     $myString = trim($myString);
     $myString = str_replace("'","´",$myString);
     $myString = str_replace('<','&lt;',$myString);
     $myString = str_replace('>','&gt;',$myString);
     $myString = eregi_replace("INSERT","",$myString);
     $myString = eregi_replace("DELETE","",$myString);
     $myString = eregi_replace("SELECT","",$myString);
     $myString = eregi_replace("UPDATE","",$myString);
     $myString = eregi_replace("DROP","",$myString);
     $myString = eregi_replace("ALTER","",$myString);
     $myString = eregi_replace("mysql","",$myString);
     $myString = eregi_replace("query","",$myString);
     return $myString;
}
 
Zuletzt bearbeitet:
Original geschrieben von split
Was bringt es denn, SQL-Injections raus zu filtern?
So kann man beispielsweise das Wort "Alter" nicht mehr benutzen!
Ich würde einfach htmlspecialchars() verwenden.
Ok, dann mach Du das mit htmlspecialchars(). Aber Stell Dir doch mal folgenden Fall vor:

SQL-Query zum Login:

PHP:
SELECT * FROM members WHERE username ='$username'  AND password = '$pass'

So, und anstatt ich jetzt meinen Usernamen eingebe, geb ich einfach folgendes ein:
PHP:
; DELETE FROM members; - '

Und dann wird aus dem Query folgende Anweisung:
PHP:
SELECT * FROM members WHERE username =''; DELETE FROM members; - ' AND password = 'pass'

Das wäre jetzt nicht so schön, wenn Du jetzt die SQL-Anweisung ausführst. Aus der eigentlichen Query wurden somit zwei verschiedene, getrennt durch das Semikolin (;). Jetzt sind alle Mitgliedsdaten futsch. Das ' -' am Ende bedeutet, dass alles, was folgt, ein SQL-Kommentar ist, und somit nicht ausgeführt werden soll.

Ok, ob ALTER jetzt wirklch rausgefiltert werden muss, is die Frage, aber generell würd ich _jede_ Eingabe, die von außen kommt, filtern, und nicht nur mit htmlspecialchars(). Siehe hierzu auch den Artikel zum Thema Sicherheit
 
Zuletzt bearbeitet:
Mal ne Verständnisfrage:
Macht denn die Funktion mysql_escape_string meine Daten, die aus dem Inputfeld kommen nun wirklich sicher bzw. unschädlich? Mit anderen Worten löst der alleinige Einsatz dieser Funktion das Problem von SQL Injections? Wohl eher nicht oder?
 
Danke für die Antwort. Dann scheint es ja ein leichtes zu sein, seine Scripts vor SQL Injections zu schützen (keine tausend str_replace o.Ä. mehr).
 
Zurück