Moin!
Abhängig von den Daten kann man den String ja auf "Badwords" untersuchen:
drop, delete, insert, update ...
und das Script nach dem Loggen aller verfügbaren Daten in den Heldentot schicken. Im Fall des Falles führt dies zu einem Fehler... aber die Daten bleiben unmanipuliert.
Das ist aber doch ein ziemlicher Aufwand, weil man dann den SQL-String echt parsen muss - und zwar mit SQL-Logik. Es reicht nicht, zu gucken, ob irgendwo das Wort "delete" vorkommt. Wäre schön doof, wenn auf diese Weise englische Texte nicht in die Datenbank eingefügt werden könnten.
Dennoch bleibt auch dieses Verfahren ein Krücke, weil man dann die mySQL- Doku ziemlich genau auf schädigendes untersucht haben muss.
Außerdem muss man den SQL-Parser zumindest einigermaßen nachbauen - unnötiger Aufwand.
phpMyAdmin macht es übrigens genau so...
Nicht ganz. phpMyAdmin hat zwar eine badwords.txt, diese wird aber nur benutzt, um bei MySQL-Versionen kleiner als 3.23.06 zu prüfen, ob Tabellen- und Feldernamen aus reservierten Worten bestehen (das dürfte wohl ansonsten zu Fehlern führen). Es wird nicht geprüft, ob der SQL-String Sinn macht - würde bei einem SQL-Admin-Tool auch keinen Sinn ergeben, gewisse Befehle auszuklammern. Wenn ein Datenbankbenutzer (Benutzer im Sinne von "der User, als der sich das Skript verbindet") nichts löschen dürfen können soll (tolle Wortkombi ;) ), regelt man das am Besten über die entsprechenden Rechte dieses Datenbankuseraccount.
- Sven Rautenberg
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)