Sven Rautenberg: Liste mit reservierten Wörtern

Beitrag lesen

Moin!

Ich rufe zum Schreiben, Ändern, Löschen entsprechende Methoden auf.

[code  lang=php]
$db->read_array($Tabelle, $Spalten, $Where, $Order, $Limit, $Key);
[/code]

Dabei sind die Parameter teilweise optional. $Key wird, wenn angegeben der Schlüssel im zurückgegebenen Array, wird $Key nicht angegeben, bleiben die nurmerischen Indizes aus Mysql erhalten.

Und da z.B. $Where ein NOT NULL, LIKE oder sonstige Schlüsselwörter  enthalten kann, muss ich das erkennen, bevor ich $Where durch mysql_real_escape_string schiebe.

Du kannst einem String nicht ohne weiteres ansehen, wie er gemeint ist. Dein System wird scheitern, weil du effektiv einen kompletten SQL-Query-Parser bauen müsstest, um dann zu analysieren, an welcher Stelle die Fails durch fehlendes Escaping drinstecken. Sowas geht nicht, denn wenn es ginge, wäre das schon dort eingebaut, wo jetzt bereits funktionierende Query-Parser eingebaut sind: In der Datenbank!

Nur mal als Beispiel: $where = "LIKE = 'NOT'"; Das ist jetzt korrekt escaped, es muss also nichts mehr getan werden. Was würde dein System draus machen?

Du brauchst keinen String, sondern Objekte, die du als Where-Bedingung zusammensetzen kannst, und die auf Anforderung zu einem korrekt escapeten String werden. Dein Parameter $where darf nur so ein Objekt akzeptieren.

An dieser Stelle könntest du allerdings auch gleich abbrechen und stattdessen einen ORM-Layer wie Doctrine benutzen. Dort sind alle Sicherheitsprobleme mit Escaping schon erkannt und mutmaßlich ausreichend behandelt, und du musst dich auch nicht um unterschiedliche Datenbanken kümmern - das erledigt bereits die Entwicklercommunity.

Ob das performant genug ist, muss ich erst noch probieren, aber das System an sich funktioniert gut. Der Vorteil, man muss nicht Querys für jede Datenbank erzeugen sondern das übernimmt die Methode für den Programmierer. Das Ganze ist Teil einer API für mein Framework/CMS

Jeder Programmierer sollte einmal im Leben ein Framework versuchen zu schreiben. Und es dann wegwerfen, und stattdessen eines der existierenden großen Alternativen nehmen. Andernfalls erzeugt man sich viele schöne zukünftige Probleme.

- Sven Rautenberg