Hat nicht-SQL-Datenbanken die Notwendigkeit, für den Schutz gegen „SQL-Injection“ mit umgehen?

StackOverflow https://stackoverflow.com/questions/1823536

Frage

Das mag wie eine offensichtliche (oder nicht so offensichtlich) Frage erscheinen, aber lassen Sie mich erklären. Ich bin Codierung eine Google App Engine-Website mithilfe von Google-Datenbanktechnologie, BigTable auf. Jegliche App Engine-Programmierer wissen, dass Google seine eigene begrenzte Abfragesprache namens GQL. Im Ergebnis bin ich versuche, keine Prüfung für SQL (oder GQL) Injektion in meiner app zu tun, da ich davon ausgehen, Google ist nicht eine rohe String-Abfrage auf den Back-End-Methoden unter Verwendung von Daten zu holen.

Darüber hinaus Bibliotheken für DB-Technologien wie CouchDB, MongoDB, und ein anderes Objekt oder Dokument (aka NoSQL) Datenbanken scheinen die Notwendigkeit zu vermeiden, zu überprüfen, ob ein böswilliger Benutzer Datenbank Manipulationsbefehle zu injizieren. Sie haben oft Bibliotheken, die direkt auf die Objekte in der Datenbank abzubilden, um in der Sprache Ihrer Wahl widersprechen. Ich weiß, dass es viele SQL-Bibliotheken, die dies auch tun, aber ich nehme an, dass sie Parameter auf einem gewissen Ebene kombinieren eine Abfrage über einen String zu laufen, und auf diese Weise muß ich noch SQL-Injection-Schutz verwenden, auch mit dieser Frameworks.

Bin ich werde kurzsichtig? Oder ist es nur eine Frage der Zeit, bis das nächste große DB-System nimmt halten und dann werde ich die Injektion in diese Systeme sehen?

War es hilfreich?

Lösung

„Injection“ Löcher sind mit Text Kontext Mismatches zu tun. Jedes Mal, wenn Sie eine Textzeichenfolge in einer anderen Kontext der Zeichenfolge setzen müssen Sie Codierung tun, um den veränderten Kontext zu passen. Es scheint verführerisch einfach blind Strings zusammen zu stopfen, aber die Schwierigkeit der Stringverarbeitung täuscht.

Datenbanken mit einer rein objektbasierte Schnittstelle ist Injection-Schwachstellen gefeit, wie parametrisierte Abfragen in SQL sind. Es gibt nichts, einen Angreifer in seinem String setzen kann aus dem Stringliteral Kontext zu brechen, in dem Sie ihn gesetzt haben.

Aber GQL ist ausdrücklich nicht einer von ihnen. Es ist eine Zeichenfolge Abfragesprache, und wenn Sie nicht vertrauenswürdiges unescaped Material in eine Abfrage wie "WHERE title='%s'" % title gehen verketten, sie ist nur so verletzlich, wie Sie mit full-on SQL waren. Vielleicht machen die begrenzten Möglichkeiten von GQL es schwieriger, dass zu nutzen die Anwendung vollständig zu gefährden, aber sicherlich nicht unmöglich, im Allgemeinen, und im besten Fall ist die Anwendung immer noch falsch und wird umfallen, wenn die Leute versuchen legitim Apostrophe zu verwenden.

GQL hat eine Parameterbindung Schnittstelle. Benutze es. Widersteht den Reiz des String-Hacking.

Andere Tipps

SQL-Untergruppen wie GQL offensichtlich selbst noch mit ihm beschäftigen -. Aber reinen Nicht-SQL-Datenbanken wie CouchDB, Voldemort, usw. sollten Daten ohne Sorge um die SQL-Injektion-Stil Angriffe setzen und bekommen

Das aber ist nicht entschuldigen von Inhalt Validierung zu tun, denn während sie die Datenbank nicht brechen könnte, kann es Ihre Anwendung brechen und erlauben Dinge wie XSS (wenn es sich um eine Web-App ist).

Immer wenn Daten, die von oder durch Benutzereingaben manipuliert werden verwendet, um die Ausführung des Codes zu steuern, bedarf es sanitization sein. Ich habe Fälle gesehen, wo Code Benutzereingabe verwendet, um einen Befehl auszuführen, ohne die Eingabe zu Desinfizieren. Es war nicht ausgenutzt worden, aber wenn es es wäre gewesen, hatte einen schrecklichen Angriffsvektor gewesen.

SQL-Injection ist nur ein Teil einer Art von Sicherheitslücke, in der ein unkontrollierten Eingang ausgewertet wird.

techincally, man könnte "injizieren" javascript, unter anderem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top