2009-10-06 15 views
7

Niedawno odziedziczyłem klasyczną stronę asp z toną wbudowanych instrukcji SQL, które są podatne na ataki SQL injection.Klasyczne wtryskiwanie ASP SQL

Te instrukcje wstawiania są wykonywane za pomocą obiektu polecenia ADO.

Czy ustawienie właściwości przygotowanej obiektu polecenia ADO na wartość true zapewni, że zapytanie zostanie sparametryzowane przed wykonaniem, zmniejszając w ten sposób ryzyko wstrzyknięcia SQL?

+2

prawdopodobny duplikat [klasycznego ASP SQL Injection Protection] (http://stackoverflow.com/questions/149848/classic-asp-sql-injection-protection) – NotMe

Odpowiedz

6

Nie, jeśli zbudujesz ciąg SQL z wartościami, które otrzymujesz bezpośrednio z "na zewnątrz", to "przygotowana instrukcja" nie pomoże.

w

sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'" 

wciąż kłopoty. Jedynym sposobem rozwiązania tego problemu jest użycie parametrów w zapytaniu.

-2

Co proponuję zrobić, to napisać funkcję do dezynfekcji wejście użytkownika, a następnie uruchomić wszystkie zmienne żądania za to. Kiedy pisałem moje Zrobiłem rzeczy jak:

  • ewakuacyjnych apostrofami,
  • Usuń; i inne znaki specjalne oraz
  • upewnij się, że nie możesz - (wypowiedzieć) na końcu instrukcji.

SQL injection Większość byłoby spróbować czegoś podobnego ' or 1=1 or a=' więc kod SQL będzie:

SELECT * from mytable where mycolumn = '' or 1=1 or a='' 

Więc uchodzące pojedyncze cudzysłowy jest prawdziwy wielki trzeba się martwić.

+1

Wiele osób wpada w tę pułapkę. Tworzenie funkcji sprawia, że ​​kod jest mniej czytelny i nie jest w przyszłości dowodem. Nie mam możliwości śledzenia wszystkich klasycznych witryn ASP, które zbudowałem lata temu, nie wspominając już o aktualizacji funkcji, której mogą używać lub nie. Parametry ADO lub procedury składowane z parametrami są do zrobienia. –

+0

i zgadzam się, że parametry są najlepszą praktyką, ale jeśli próbujesz szybko wyczyścić cały pakiet, to zawijanie wszystkich danych wejściowych użytkownika w funkcji jest łatwiejsze. –

+1

Nie wydaje mi się, że potrzeba czasu na dodanie paczki oCmd.Parameters .Append oCmd.CreateParameter (...) 'do kodu, i szczerze mówiąc w takich sytuacjach myślę, że lepiej jest skupić się na jakości niż prędkości, szczególnie jeśli nie masz czasu, aby wykonać pracę dwukrotnie. –

Powiązane problemy