2014-11-23 61 views
7

如何避免sql注入Azure DocumentDB存儲過程?在Azure DocumentDB存儲過程中避免SQL注入

除了消毒輸入(白名單字符),這裏最好的做法是什麼?

採取例如適於從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){} 
    ); 
} 

即S1參數是注入SQL到查詢一個標準的例子。到目前爲止,我還沒有找到一種參數化查詢的方法。

回答

10

更新:

高興地說,由於15年1月14日 - DocumentDB 確實支持SQL參數化。已在.NET,Java,Node.js和Python SDK以及REST API中添加了支持。享受=)

下面是使用.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") 
        } 
}); 

原來的答案

DocumentDB不支持SQL參數化 ...所以你會希望你的消毒以避免意外暴露讀取數據(例如,對於多租戶應用程序)。

這就是說... DocumentDB SQL注入攻擊面區域相當有限 - 因爲DocumentDB SQL僅支持只讀查詢。換句話說,您不必擔心在DocumentDB和SQL注入的上下文中無意的寫入/更新/刪除操作。