7

SQL インジェクション Azure DocumentDB ストアド プロシージャを回避するにはどうすればよいですか?

入力 (ホワイトリストに登録された文字) をサニタイズする以外に、ここでのベスト プラクティスは何ですか?

たとえば、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 をクエリに挿入する標準的な例です。これまでのところ、クエリをパラメータ化する方法も見つかりませんでした。

4

2 に答える 2

4

ストアド プロシージャ JavaScript ファイルに適用される質問に答えるには、次のようにします。

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

   var query = { query: "select * from Families f where f.id = @id", parameters: [{ name: "@id", value: id }] };

   collection.queryDocuments(collection.getSelfLink(), 
      query, {}, 
      function(res){}
   );
}
于 2019-03-17T15:40:04.267 に答える