Byłem ciekawy, czy można chronić się przed atakiem typu SQL injection, usuwając wszystkie spacje z danych wejściowych typu String?
Czytałem o SQL Injection w OWASP, ale nie wspominają o usuwaniu spacji, więc byłem ciekawy, dlaczego to zadziała lub nie?
Patrzyłem na to pytanie, które pyta o trim
, a górna odpowiedź brzmi tak:
Nie, dodanie trymowania nie zapobiegnie iniekcji sql.
trim
usuwa tylko spację na zewnątrz ciągu.Wybierz * z tabeli, gdzie nazwa taka jak '%' + @ SearchString + '%'
Jeśli @SearchString miał coś takiego jak
'' update aTable set someColumn = 'JackedUpValue', gdzie jakaś kolumna wygląda jak '
Następnie, gdy złożyć to wszystko w całość i wykonać dynamicznie, aby uzyskać
Wybierz * z tabeli, gdzie nazwa taka jak '%' zaktualizuj aTable set someColumn = 'JackedUpValue' gdzie jakaś kolumna jak '%'
Jednak jeśli wziąłeś ten ciąg wyszukiwania
update aTable set someColumn = 'JackedUpValue' gdzie jakaś kolumna taka jak
i wykonałeś operację pokazaną w tym pytaniu, czy nie dostaniesz
updateaTablesetsomeColumn = 'JackedUpValue'wheresomeColumnlike
który nie powinien być wykonywany, prawda?
Jestem ciekawy, czy istnieje jakaś forma wstrzyknięcia SQL, która mogłaby to pokonać? Czy jest jedno słowo niebezpieczne polecenia? Jeśli można to pokonać, czy usunięcie spacji przynajmniej pomogłoby trochę w obronie?
Uwaga: zadaję to pytanie z czystej ciekawości, a nie w celu obejścia „właściwe” metody zapobiegania wstrzykiwaniu kodu SQL.