2014-11-23 19 views
7

Come evitare le procedure memorizzate di Azure DocumentDB di SQL injection?Evitare l'iniezione SQL in Azure DocumentDB Stored procedure

Oltre alla sanitizzazione dell'input (caratteri della whitelist) qual è la procedura migliore qui?

Prendiamo ad esempio il seguente stored procedure adattato dall'esempio MSDN:

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){} 
    ); 
} 

Tale parametro s1 è un esempio standard SQL iniettando nella query. Finora non ho trovato un modo per parametrizzare la query.

risposta

10

Aggiornamento:

felice di dire che a partire dal 1/14/15 - DocumentDB fa supporto SQL parametrizzazione. Il supporto è stato aggiunto agli SDK .NET, Java, Node.js e Python, nonché all'API REST. Godetevi =)

Ecco un esempio utilizzando l'SDK .NET:

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") 
        } 
}); 

risposta originale

DocumentDB non supporta SQL parametrizzazione ancora ... così si vuole per disinfettare il tuo input per evitare l'esposizione involontaria di dati su letture (ad es. per applicazioni multi-tenant).

Detto questo ... la superficie di attacco per l'iniezione di SQL di DocumentDB è piuttosto limitata, poiché DocumentDB SQL supporta solo query di sola lettura. In altre parole, non devi preoccuparti di scritture/aggiornamenti/eliminazioni non intenzionali nel contesto di DocumentDB e SQL Injection.

Problemi correlati