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?
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
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 –
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. –