2014-11-23 5 views
7

Wie kann ich die gespeicherten Azure DocumentDB-Prozeduren zur SQL-Injektion vermeiden?SQL-Injection in gespeicherten Azure DocumentDB-Prozeduren vermeiden

Abgesehen von der Bereinigung der Eingabe (Whitelist-Zeichen) Was ist die beste Vorgehensweise hier?

Nehmen Sie zum Beispiel die folgende gespeicherte Prozedur aus dem Beispiel MSDN angepasst:

function simple_sp(s1) { 
    var context = getContext(); 
    var collection = context.getCollection(); 
    var response = context.getResponse(); 

    collection.queryDocuments(collection.getSelfLink(), 
     'SELECT * FROM Families f where f.id = "' + s1 + '"', {}, 
     function(res){} 
    ); 
} 

Das s1 Parameter ein Standardbeispiel ist SQL in die Abfrage zu injizieren. Bisher habe ich noch keine Möglichkeit gefunden, die Abfrage zu parametrisieren.

Antwort

10

Update:

Glücklich zu sagen, dass, wie von 1/14/15 - DocumentDB tut Unterstützung SQL Parametrierung. Unterstützung wurde in den .NET-, Java-, Node.js- und Python-SDKs sowie in der REST-API hinzugefügt. Genießen =)

Hier ist ein Beispiel unter Verwendung des .NET SDK:

IQueryable<Book> queryable = client.CreateDocumentQuery<Book>(collectionSelfLink, new SqlQuerySpec { 
        QueryText = "SELECT * FROM books b WHERE (b.Author.Name = @name)", 
        Parameters = new SqlParameterCollection() { 
          new SqlParameter("@name", "Herman Melville") 
        } 
}); 

Original-Antwort

DocumentDB nicht SQL Parametrisierung unterstützt noch ... so werden Sie wollen sanieren Ihre Eingaben, um eine unbeabsichtigte Exposition von Daten bei Lesevorgängen zu vermeiden (z. B. bei Multi-Tenant-Anwendungen).

Das heißt ... die Angriffsfläche von DocumentDB SQL Injection ist ziemlich begrenzt - da DocumentDB SQL nur Read-Only-Abfragen unterstützt. Mit anderen Worten, Sie müssen sich im Zusammenhang mit DocumentDB und SQL Injection keine Gedanken über unbeabsichtigte Schreibvorgänge/Aktualisierungen/Löschungen machen.

Verwandte Themen