2016-03-20 6 views
0

Ich möchte jQuery Query Builder als Werkzeug in einer Multi-User-Anwendung verwenden: http://mistic100.github.io/jQuery-QueryBuilder/Verhindern von SQL-Injection in Rails bei der Verwendung von Javascript Query Builder

ich ein solches Werkzeug verstehen, mit potenziell große Risiken für SQL-Injection führen könnte wenn nicht richtig eingerichtet.

Ich kenne die traditionellen Methoden der Verhinderung von SQL-Injektion (dh Hardcoding der WHERE-Anweisung statt Einfügen von Benutzer-inputed Strings direkt in), aber in diesem Fall würde sich als etwas schwieriger erweisen, wie dynamisch und flexibel versuchen wir die Dinge zu halten.

Ich frage mich, ob es eine einfache Möglichkeit gibt, einen sicheren Prozess einzurichten, während Sie etwas wie diesen Abfrage-Generator verwenden. Das Hauptproblem besteht darin, dass ein Benutzer auf die Datensätze eines anderen Benutzers zugreifen und/oder diese ändern kann (ich bin nicht so besorgt darüber, dass sie mit ihren eigenen Aufzeichnungen herumspielen, sondern sich alle in derselben Datenbank befinden).

Eine Idee, die ich hatte, ist ein Suchen und Ersetzen für irgendwelche problematischen Wörter (zB DROP, etc), aber ich verstehe, dass dies Einschränkungen bei der Benutzereingabe setzen würde (dh wenn sie Datensätze suchen wollten, die übereinstimmten) Ball ") ... und ist vielleicht auch nicht narrensicher.

Gibt es noch andere Methoden, die funktionieren könnten, ohne dass ein komplizierter Algorithmus programmiert werden muss, um die SQL-Code-Server-Seite zu generieren?

Antwort

1

Im Allgemeinen sollten Sie wirklich "Filter" -Parameter nur auf GET-Anfragen für einen Index akzeptieren. Selbst dann wollen Sie nicht alle Parameter willy-nilly und schieben sie in eine WHERE-Klausel.

Wenn Sie den Benutzer komplexe Bedingungen erstellen lassen möchten, erstellen Sie einen einfachen Parser, der Benutzereingaben übernimmt und SQL-Anweisungen über Arel erstellt.

Oder möchten Sie eine vorhandene Engine für Volltextsuche wie Lucene verwenden.