2014-11-23 2 views
7

SQL 주입 Azure DocumentDB 저장 프로 시저를 어떻게 피할 수 있습니까?Azure DocumentDB 저장 프로 시저에서 SQL 주입 방지

입력 사항 (허용 된 문자)을 제외하고 여기서 가장 좋은 방법은 무엇입니까? 예

취하는 MSDN 예에서 적응 다음 프로 시저 : S1 파라미터에 SQL 질의를 주입 표준 예는

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

있다. 지금까지 쿼리를 매개 변수화하는 방법을 찾지 못했습니다.

답변

10

업데이트 : 1/14/15의 같은 것을 말할 해피

- DocumentDB 지원 SQL 매개 변수화 않습니다. REST API뿐만 아니라 .NET, Java, Node.js 및 Python SDK 전반에 걸쳐 지원이 추가되었습니다.

가 여기에 .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 Injection의 컨텍스트에서 걱정할 필요가 없습니다.