2014-11-23 16 views
7

W jaki sposób można uniknąć sql injection Procedury składowane Azure DocumentDB?Unikanie iniekcji SQL w usługach przechowywanych Azure DocumentDB

Oprócz sanityzacji danych wejściowych (znaki umieszczone na białej liście), jaka jest tutaj najlepsza praktyka?

Weźmy pod uwagę następującą procedurę przechowywane dostosowany z przykładu 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){} 
    ); 
} 

że S1 Parametr standardowy przykład wstrzykiwanie SQL do zapytania. Do tej pory nie znalazłem sposobu na parametryzację zapytania.

Odpowiedz

10

Aktualizacja:

okazji powiedzieć, że od 1/14/15 - DocumentDB robi wsparcie SQL parametryzacji. Dodano obsługę pakietów SDK .NET, Java, Node.js i Python, a także interfejs API REST. Enjoy =)

Oto przykład przy użyciu .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") 
        } 
}); 

oryginalny Odbierz

DocumentDB nie obsługuje SQL parametryzację jeszcze ... więc chcesz zdezynfekować swój dane wejściowe, aby uniknąć niezamierzonego narażenia danych na odczyty (np. dla aplikacji dla wielu dzierżawców).

W związku z tym ... powierzchnia ataku typu DocumentDB SQL injection jest dość ograniczona - ponieważ DocumentDB SQL obsługuje tylko kwerendy tylko do odczytu. Innymi słowy, nie musisz się martwić o niezamierzone zapisywanie/aktualizowanie/usuwanie w kontekście funkcji DocumentDB i SQL Injection.

Powiązane problemy