2011-01-11 15 views
5

Projektuję część internetową, w której użytkownicy mogą wpisać szukaną frazę, do której poszukiwany jest indeks wyszukiwania MOSS. Używam klasy FullTextSqlQuery do wyszukiwania.Wstrzyknięcia SQL w składni SQL Sharepoint Enterprise Składnia wyszukiwania

Kiedy tworzę moją instrukcję select, najwyraźniej muszę użyć konkatenacji, aby uwzględnić w niej dane użytkownika. Ostateczna statment powinno być coś takiego:

SELECT title, author from portal..scope() 
WHERE ("SCOPE" = 'TheDocuments') 
AND CONTAINS(MYPROPERTY, 'TheValueThatuserSpecified') 

Więc pytanie jest, w jaki sposób uniknąć SQL injection od danych wejściowych użytkownika (?)? Czy jest w tym jakieś specjalne narzędzie? W projektach php/mysql użyłbym mysql_real_escape_string. Coś podobnego w przestrzeniach nazw SharePoint?

Odpowiedz

2

nie znalazłem żadnej funkcji do kodowania danych wprowadzonych przez użytkownika, więc tworzę własną metodę:

protected override string EncodeUrlParameter(string paramValue) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < paramValue.Length; i++) 
    { 
     char c = paramValue[i]; 
     if (c == '*' || c == '%' || c == '[' || c == ']' || c == '_') 
      sb.Append("[").Append(c).Append("]"); 
     else if (c == '\'') 
      sb.Append("''"); 
     else 
      sb.Append(c); 
    } 
    return sb.ToString(); 
} 

ten jest stosowany głównie do parametrów filtrowane za pomocą LIKE słowa kluczowego (the documentation page has a note about this) . Największą rzeczą, na jaką natknąłem się, było to, że ludzie próbowali zawrzeć w swoich zapytaniach apostrofy.

2

Klasa FullTextSQLQuery wykonuje "pełny tekst" sql zapytanie co jest nie prawdą sql. "Pełnotekstowy sql" jest analizowany i konwertowany na regularne sql na zapytanie o tabelę w bazie danych serwera SQL i zapytanie do zewnętrznego pliku indeksu . Nie ma sposobu, aby wykonać iniekcję sql przez "pełny tekst sql", to nie przejdzie sprawdzania poprawności. Nazwy kolumn " " używane w "pełnym sql tekstu" muszą być poprawnymi "zarządzanymi właściwościami", które są skonfigurowane w trybie wyszukiwania Administracja, nie wskazują one na rzeczywiste nazwy kolumn w tabeli .

http://www.sharepointdev.net/sharepoint--search/is-fulltextsqlquery-protected-against-sql-injection-35184.shtml

+1

To prawda, ale w ten sposób użytkownik mógł mimo wszystko wprowadzić wyrażenie wyszukiwania typu '') ORAZ ZAWIERA (ANOTHERPROPERTY," Anothervalue ") LUB (SCOPE =" AnotherScope ".) Wyraża to prawidłowe zapytanie, ale w całkiem inny sposób. point is - musisz zadbać o uchylanie apostrofów, cytowanie itp. – naivists

+0

Predator CONTAINS działa tylko przeciwko właściwościom zarządzanym, które zostały włączone jako FullTextQueriable .Równie, flaga Retrievable Ta flaga zapobiega zwróceniu wartości Managed Property, jeśli została określona jako kolumna w instrukcji SELECT –

+1

Ponadto wyniki wyszukiwania są wyrównywane przez zabezpieczenia, więc nawet jeśli uda ci się uruchomić uruchamiane zapytanie, otrzymasz wyniki, do których normalnie masz dostęp. –