Piszę funkcję wyszukiwania i wymyśliłem tę kwerendę za pomocą parametrów, aby zapobiec lub przynajmniej ograniczyć ataki SQL injection.Howto? Parametry i instrukcja LIKE SQL
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Może być używany parametry tak: Jednak, kiedy go uruchomić poprzez mój program to niczego nie wrócić? lub czy są one ważne tylko w instancji takiej jak:
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'
(gdzie obiektem jest obiekt <string>
).
EDYCJA: Konstruuję tę funkcję za pomocą VB.NET, czy ma to wpływ na składnię, którą wnieśliście?
Też, uruchomiłem to oświadczenie w SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE
% max% ') `i który zwraca wyniki.
Jak zaznaczył Adam w swojej odpowiedzi, nie chroni to przed iniekcją SQL. Zapytanie należy sparametryzować. – DOK
Czy możesz podać przykład, w którym nie zapobiega to iniekcji SQL? Z moich testów działa dobrze – John
Nie jest otwarty na iniekcje "SQL", tylko iniekcji "LIKE". Oznacza to, że użytkownik może wprowadzić znaki specjalne, takie jak '%' '^' i '_', które' LIKE' będzie interpretować specjalnie. Oznacza to, że użytkownik może nie uzyskać tego, czego oczekuje od niektórych wyszukiwań. Na przykład poszukiwanie "mniej niż 1% tłuszczu" może zwrócić wynik "mniej niż 1% lekarzy zaleca to - jest pełne tłuszczu!". –