Pytanie:
Czy długość pola jest zbyt krótka, aby umożliwić szkodliwe wstrzyknięcie kodu SQL?
James Jenkins
2017-02-28 22:18:55 UTC
view on stackexchange narkive permalink

Czytałem o wstrzyknięciu SQL i zobaczyłem to, co skłoniło mnie do myślenia:

pola wejściowe tak małe, jak to możliwe, aby zmniejszyć prawdopodobieństwo, że haker będzie w stanie wcisnąć kod SQL w pole bez obcięcia (co zwykle prowadzi do błędu składni T-SQL).

Źródło: Microsoft SQL Server 2008 R2 Unleashed

Jaki jest najmniejszy rozmiar pola, w którym wstrzyknięcie SQL może spowodować szkody?

Szkodą jest modyfikacja bazy danych lub zwracanie wyników niezgodnych z przeznaczeniem. Umieszczenie znacznika komentarza końcowego ( - ) w dwuznakowym polu nie spowodowałoby szkody, a jedynie spowodowałoby błąd zapytania. Potencjalny haker może się dowiedzieć, że pole jest podatne na zastrzyk, ale nie jest w stanie go wykorzystać.

Jeśli podany błąd jest szczegółowy, może to wystarczyć do uzyskania przydatnych informacji, zwłaszcza gdy programista potraktował nazwy tabel jako „tajne” ...
SQL Injection nie zawsze jest wykonywana w polu wejściowym - możesz kierować na klauzule orderby w adresach URL, na przykład, w których możesz wykonać złośliwy sql.Ograniczony rozmiar pola tego nie powstrzyma.
@iain: Słuszna uwaga.Ponadto ograniczenie długości pól dla (zakładam) otrzymanych danych formularza HTML nie wydaje mi się dobrym sposobem na uniknięcie wstrzyknięcia sql.Unikanie iniekcji SQL jest w zasadzie rozwiązanym problemem;po prostu pozwól bibliotece połączeń bazy danych obsłużyć to, używając przygotowanych instrukcji z symbolami zastępczymi, zamiast wklejać razem zapytania za pomocą funkcji tekstowych języka programowania i robić to źle, ponieważ zapomniałeś zabezpieczyć się przed luką numer 59654.
@Pascal "* Unikanie iniekcji SQL jest w zasadzie rozwiązanym problemem; *" dotyczy tylko nowego kodu, w którym zastosowano odpowiednie uwagi.Istnieje wiele kodów, w których problem nie został rozwiązany.Przypuszczalnie istnieje długość znaków, poniżej której rozwiązywanie istniejących problemów jest mniej palące niż te z dłuższymi.
Czy tylko ja uważam, że ta książka powinna zostać publicznie spalona?Sparametryzowane zapytania istnieją od tak dawna, że autor prowadzi mnie do wniosku, że nie mają nawet połowy pojęcia, o czym mówią.Wygląda na to, że skopiowali i wkleili śmieci ze zbioru blogów i wydali książkę.Równie dobrze mogą ci powiedzieć, że powinieneś ćwiczyć strzelanie mniejszymi pociskami, abyś mógł zbudować odporność na większe pociski.
@MonkeyZeus To bardziej reguła niż wyjątek w książkach technicznych.Gdy specjaliści niezwiązani z bezpieczeństwem oferują porady dotyczące bezpieczeństwa, często są one niskiej jakości.
A co powiesz na 0 znaków?I tylko wtedy, gdy jest sprawdzane na serwerze.
@Xander To stwierdzenie bardzo mnie niepokoi.Z pewnością nie jestem też ekspertem od bezpieczeństwa, ale mój jeden akapit prawdopodobnie dziesiątkuje wszystko, co ma do zaoferowania ta książka.Wydaje mi się, że [Argument z ignorancji] (https://en.wikipedia.org/wiki/Argument_from_ignorance) nadal cieszy się niesłabnącą popularnością.Jedynym możliwym małym ułatwieniem oszczędzania dla tej książki byłoby, gdyby parametryzacja nie była obsługiwana w tej wersji SQL Server.Ponadto, jeśli jest to bardziej reguła niż wyjątek, będziemy mieli potężny ogień.
@MonkeyZeus Zgadzam się, że jest to niepokojące, ale mam trochę hobby, przeglądając porady dotyczące bezpieczeństwa w książkach technicznych, aw szczególności książkach o programowaniu.Pokrycie jest na ogół fatalne lub całkowicie nieobecne.Na przykład, mam książkę o budowaniu systemów handlu elektronicznego od podstaw, w której pokrótce omówiono użycie HTTPS, a następnie oświadczam, że dalsze dyskusje na temat bezpieczeństwa były „poza zakresem” książki.
@Xander Powiedziałbym, że „szukaj gdzie indziej” jest szlachetniejsze niż bezczelne twierdzenie czegoś w stylu „zaciemnij dane formularza za pomocą JavaScript i losowego klucza wygenerowanego przez serwer przed wysłaniem danych na serwer”.Przynajmniej w tej książce o handlu elektronicznym jest napisane „Hej, nie chcemy, aby Twój serwer został sfałszowany fallusem z papieru ściernego, więc jeśli zależy Ci na bezpieczeństwie, zdobądź dobrą książkę o tym. Nasza książka po prostu uczy, jak zbudować e-komercyjnej, a nie jak ją zabezpieczyć ”.
Z zasady jestem przeciwny paleniu książek - ale zagłosowałbym za przywróceniem zapasów dla autorów - „co zwykle prowadzi do błędu składniowego T-SQL” - celem SQL Injection jest sprawienie, aby przesłane dane wchodziły w interakcję zgranicami zamierzonego celu.
Podobnie jak w przypadku innych odpowiedzi, krótkie pola nie zapobiegną problemom.Niedawno pracowałem nad starszą aplikacją z 8-znakowym polem nazwy użytkownika (i 8 znaków zostało wpisanych w kodzie), ale nadal była otwarta na wstrzyknięcie SQL.Sytuacja pogorszyła się, gdy pole hasła zostało również użyte we wstrzyknięciu.
Chociaż zgadzam się w 100% co do tego, jak słabo rozwiązuje się te problemy z bezpieczeństwem i jak złe są rady zawarte w tej książce, myślę, że ta rada jest zła, głównie dlatego, że jest bardzo prawdopodobne, że pozwoli ludziom oszukać siebie„uchronili się przed wstrzyknięciem SQL i jest to również złe, ponieważ zachęca to do dążenia do redukcji ryzyka w przypadku, gdy wyeliminowanie ryzyka byłoby możliwe (i łatwe).Nie można zaprzeczyć, że ten cytat nie zapobiega iniekcji SQL;po prostu twierdzi, że „zmniejsza prawdopodobieństwo” (co jest głupie i mylące).
@MonkeyZeus Wiele interfejsów API bazy danych * nadal * nie obsługuje parametrów o wartościach tablicowych, takich jak te dla prawej strony operatora `IN`.Aby obejść ten problem, musisz uwzględnić zmienną liczbę parametrów w zapytaniu, w którym to momencie kończysz „wklejanie razem” listy symboli zastępczych i utrzymywanie kolejności pozycyjnych symboli zastępczych („?”) Zsynchronizowanych między instrukcjąa tablica wartości jest tak trudna, jak ucieczka.
Osiem odpowiedzi:
Xander
2017-02-28 23:18:13 UTC
view on stackexchange narkive permalink

Zakładam, że bez kontekstu autor odnosi się do pól wejściowych w aplikacji klienckiej. Najłatwiejszym przykładem do użycia byłby formularz na stronie HTML w aplikacji internetowej, chociaż to, co mam zamiar opisać, sprawdza się w przypadku praktycznie każdego typu aplikacji klienckiej.

Biorąc pod uwagę ten kontekst, odpowiedź brzmi: nie, nie ma wystarczająco krótkiej maksymalnej długości pola wejściowego, aby chronić Cię przed wstrzyknięciem SQL, ponieważ nie kontrolujesz maksymalnej długości pola wejściowego . Atakujący to robi. Gdy formularz zawierający pole wejściowe znajduje się na kliencie (np. W oknie przeglądarki na komputerze atakującego), znajduje się on poza granicą zaufania i poza Twoją kontrolą. Można nim manipulować w dowolny sposób, jakiego chce lub potrzebuje atakujący, lub całkowicie go uniknąć. Pamiętaj, że w przypadku aplikacji internetowej otrzymujesz tylko żądanie HTTP. Nie masz pojęcia, jak został utworzony i nie ma powodu, aby sądzić, że cokolwiek o co prosiłeś przeglądarkę, faktycznie się wydarzyło, że wszelkie mechanizmy kontroli bezpieczeństwa po stronie klienta zostały faktycznie uruchomione, że wszystko w żądaniu jest takie zamierzałeś lub w jakikolwiek sposób bezpieczny.

Więc nie, długość pola wejściowego nie jest prawidłowym mechanizmem zapobiegającym iniekcji SQL i nigdy, nigdy nie ufaj wejściom, które przekraczają granice bezpieczeństwa bez ich walidacji.

to dobra odpowiedź, być może autor oznacza, że zbyt krótkie pole zmniejsza prawdopodobieństwo uzyskania informacji z baz danych, ale nie może uniknąć szkody spowodowanej wstrzyknięciem SQL, na przykład „lub 1 = 1” może spowodować duże szkody.
@hmrojas.p Tak się jednak nie dzieje, ponieważ maksymalna długość pola wejściowego w rzeczywistości nie zapobiega wysyłaniu przez złośliwego użytkownika tylu danych, ile chce w tym polu.Mogę ustawić maksymalną długość danych wejściowych na 3, a osoba atakująca może nadal wysyłać lub 1 = 1; porzucić użytkowników tabeli; - Jeśli nie sprawdzisz po stronie serwera, nic nie stoi na przeszkodzie.
Tak, zgadzam się, zakładałem, że po stronie serwera była walidacja długości, mam na myśli, że rodzaj wstrzyknięcia SQL (`lub 1 = 1`) może wpłynąć na zapytanie SQL, takie jak UPDATE lub DELETE, może zepsuć integralność danych,nawet jeśli masz walidację długości po stronie serwera, ta miara jest komplementarna.
A więc co z tym, że serwer przeprowadzi wtedy tę walidację.Szkodliwi użytkownicy nie mogą tego dotknąć.Jeśli mój skrypt PHP używa maksymalnie pierwszych x znaków (co jest niezwykle proste i można by to zrobić w środku zapytania), to co?
@Ryan To jest w rzeczywistości klucz.* To * byłaby kontrola bezpieczeństwa.Ustawienie maksymalnej długości pola wejściowego jest przyjemne dla UX, ale nie ma wartości bezpieczeństwa.To sprawdzanie poprawności danych wejściowych po stronie serwera zapewnia bezpieczeństwo.To jest fundamentalne i ważne rozróżnienie.Jest to rozróżnienie teoretyczne, ponieważ poprawną odpowiedzią jest użycie zapytań parametrycznych, ale patrząc ściśle na zarządzanie danymi wejściowymi, nadal jest to ważne rozróżnienie.
Głosowałem w dół, ponieważ zakłada się, że długość pola nie jest zweryfikowana po stronie serwera.Chociaż zgadzam się, że każda odpowiedź powinna zawierać wzmiankę, że długość musi być zweryfikowana po stronie serwera i poza kontrolą użytkownika, aby była użyteczna, uważam, że weryfikacja długości po stronie serwera całkowicie unieważni całą twoją odpowiedź.(Odpowiedź może nadal brzmieć nie, ale nie z tego powodu).
@jpmc26 Nie ma znaczenia, czy jest on zweryfikowany po stronie serwera.Kontekst oferty jest środkiem „bezpieczeństwa” po stronie klienta, a walidacja po stronie serwera nie jest uwzględniana.
@Xander Jedyną osobą, która przyjęła tutaj walidację tylko po stronie klienta, jesteś Ty.W pytaniu lub komentarzach nie widzę nic, co sugerowałoby, że jest to sytuacja, którą opisuje PO.
@jpmc26 Z pytania: * „pola wejściowe tak małe, jak to możliwe” *.Czy serwer wie, co to jest pole wejściowe, gdy otrzymuje odpowiedź?Mam na myśli, że jeśli prześlesz formularz HTML, serwer nie ma pojęcia „pola wejściowego”.Po prostu pobiera dane.Myślę, że bez kontekstu z książki cytat jest trochę niejednoznaczny.
@JacobAlvarez Serwer oczywiście wie, jakie są dane wejściowe i może rozpoznać wartości, jeśli może umieścić je w zapytaniu SQL, w którym może nastąpić wstrzyknięcie.Jeśli potrafi rozpoznać wartości, może określić długość.Nie zrozum mnie źle;cytat jest bezsensowny.Ale tak samo jest z wymyślaniem niepowiązanych powodów, dla których jest to nonsensowne, więc znajdźmy właściwe powody.
@jpmc26, cytat mówi „pole wejściowe”.To tutaj zachodzi interakcja użytkownika.Jest więc dla mnie jasne, że chodzi o stronę klienta, a nie serwer.To samo dotyczy formularzy, które sprawdzają poprawność danych wejściowych JS.O ile nie jest * wyraźnie zaznaczone *, że walidacja jest * powtórzona * po stronie serwera, można bezpiecznie założyć, że walidacja po stronie serwera nie istnieje.
@aross Z tego, co wiemy, moglibyśmy mówić o interfejsie REST, który nawet nie zapewnia GUI.„Pole wejściowe” oznacza dla mnie nic więcej niż wartość wygenerowaną przez użytkownika.Wspomnienie, że walidację długości należy przeprowadzić w środowisku, nad którym użytkownik nie ma kontroli, jest zdecydowanie właściwe.Zakładając, że tak się nie stanie, a podstawą * całej * odpowiedzi jest po prostu unikanie odpowiedzi na pytanie w ogóle.
@jpmc26 Wydaje się, że parametry są mylone z polami wejściowymi.
@aross Wydaje mi się, że myślę o fakcie, że wartości z tych „pól wejściowych” kończą * w zapytaniu SQL *.Nie ma praktycznej różnicy, a „pole wejściowe” nie jest tak ściśle zdefiniowane.Pogląd, że jest to walidacja tylko po stronie klienta, jest * całkowicie nieuzasadnionym założeniem *, wartym jedynie uwagi dodatkowej.* Nic * nie odpowiada na pytanie, czy długość ma znaczenie w kontekście iniekcji SQL.
Cóż, jeśli zaczynamy dyskusję na temat semantyki, oto kilka źródeł: [input] (https://en.wikipedia.org/wiki/Input_ (computer_science)), [parametr] (https: //en.wikipedia.org / wiki / Parameter_ (programowanie_komputera))
Pozwól nam [kontynuować tę dyskusję na czacie] (http://chat.stackexchange.com/rooms/54700/discussion-between-jpmc26-and-aross).
tim
2017-03-01 00:10:54 UTC
view on stackexchange narkive permalink

Nie, żadna długość nie jest zbyt krótka, aby można ją było wykorzystać (przynajmniej w niektórych sytuacjach).

Filtr długości nie jest poprawnym zabezpieczeniem przed wstrzyknięciem SQL, a przygotowane instrukcje naprawdę są tylko właściwa obrona.

Filtr długości jest jednak dobrym środkiem ochrony w głębi (podobnie jak filtry liczb całkowitych, filtry alfanumowe itp.). Jest wiele sytuacji, w których np. prawidłowe dane wejściowe nigdy nie mogą być większe niż, powiedzmy, 30 znaków, ale tam, gdzie sensowne wykorzystanie wymaga więcej. Powinno (ale prawdopodobnie nie) być oczywiste, że jakiekolwiek filtrowanie jako obrona głęboka musi odbywać się po stronie serwera, ponieważ wszystko po stronie klienta można po prostu ominąć.

Obwodnica ograniczeń

Klauzule ograniczające (np. AND / OR ) można ominąć dwoma znakami, co może spowodować rzeczywistą szkodę, a nie tylko nieudane zapytanie. Najprostszym przykładem jest login (inne przykłady to nieautoryzowane usunięcie dodatkowych danych):

  SELECT * FROM users WHERE userid = [id] AND password = [password]  

Wtrysk:

  id = 1 # hasło = złe_hasło  

Ładunek: 2 znaki

DoS

Ataki DoS wymagają bardzo niewielu znaków. W przykładzie MySQL potrzeba 7 na rzeczywiste wywołanie + x przez dane sekundy + wszystko, co jest potrzebne, aby móc wywołać funkcję i naprawić zapytanie.

Przykład:

  SELECT * FROM users WHERE userid = [id]  

Injection (to jest prawidłowy zastrzyk, dłuższa forma to 1 AND sleep (99) ):

  sleep (99)  

Ładunek: 9 znaków

Odczytywanie danych

Jeśli dane jest wyświetlany, długość zależy głównie od nazwy tabeli i kolumny. Zakładam równą liczbę kolumn dla wszystkich tabel (może się to zdarzyć i oszczędza znaki).

Przykład :

  SELECT * FROM comments WHERE commentid = [id]  

Injection:

  1 union select * from users  

Payload: 27 znaków.

Edycja danych

Nieautoryzowane modyfikacje bazy danych można również osiągnąć przy użyciu kilku znaków.

Przykład:

  UPDATE użytkowników SET password = '[hasło]' WHERE id = [id]  

Wstrzyknięcie (do hasła):

  ', isadmin =' 1  

Ładunek: 12 znaków

Obejście ograniczenia również zadziała (w rezultacie wszystkie hasła są teraz puste *):

  '#  

Ładunek: 2 znaki

* Przykładowe hasło służy do uproszczenia; hasła powinny być zaszyfrowane, aby przykład był niemożliwy. Przykład nadal ma zastosowanie we wszystkich podobnych sytuacjach (aktualizacja nazwy użytkownika, aktualizacja uprawnień itp.)

`Filtr długości nie jest poprawną ochroną przed wstrzyknięciem SQL, a przygotowane instrukcje są naprawdę jedyną właściwą obroną. 'To jedyna ważna odpowiedź.SQL bez gotowych instrukcji przypomina mi ["Strategie jazdy na zdechłym koniu"] (http://www.deadhorses.org/)
Powodzenia w przygotowywaniu instrukcji ze zmienną liczbą symboli zastępczych, takich jak prawa strona operatora „IN”.
@DamianYerrick Myślę, że to błędna hipoteza.Dlaczego miałbyś zapewnić użytkownikowi końcowemu nieskończone kombinacje symboli zastępczych dla klauzuli „IN”?Łatwo jest mieć kilka szablonów, które pozwalają na 1..n (dla małego n).
W „SELECT * FROM users WHERE userid = [id]” możesz wstawić a, jeśli a jest nazwą kolumny, więc masz wstrzyknięcie tylko 1 znaku.
@ShawnC Przypadek użycia polega na tym, że użytkownik wprowadza listę elementów do zapytania.Po pierwsze, jak duże jest „małe n”?Wydawałoby się, że narusza zasadę zero-jeden-nieskończoność.Po drugie, jeśli istnieją dwa różne pola wejściowe o wartościach list, musisz teraz przechowywać i testować O (n ^ 2) szablonów.
@Alexander: Należy pamiętać, że nie zawsze można używać przygotowanych instrukcji, ponieważ nie mogą one parametryzować nazw pól.A kiedy musisz skonstruować swoje łączenia na podstawie danych wejściowych użytkownika, Twoja praca stała się o wiele trudniejsza ...
@Joshua Są to szczególne przypadki,> 99% zapytań niesparametryzowanych można sparametryzować bez większego kłopotu.A w specjalnych przypadkach wymuszenie, że nazwy pól muszą być zgodne z `[a-zA-Z] +` jest znacznie łatwiejsze niż dopuszczenie pewnych znaków specjalnych w wartościach, a zabronienie innych.Ciekawostki: Kiedy przełączyłem się na sparametryzowane zapytania w PHP, głównym problemem było znalezienie dostawcy, który miałby włączoną funkcję mysqli.[Moim głównym problemem w DotNet była klauzula `IN`.] (Http://stackoverflow.com/questions/20143012/sqlparameter-and-in-statement)
@Alexander: Czy jest jakiś problem z bezpieczeństwem podczas generowania zapytania w postaci `SELECT [cokolwiek] z MyTable, gdzie id = @ @p0 OR id = @ @p1 OR id = @ @p2` dla dowolnej liczby parametrów wprowadzonych przez użytkownika, jeśli żadnetekstu parametrów znajduje się w zestawieniu?
Serge Ballesta
2017-03-01 04:13:06 UTC
view on stackexchange narkive permalink

pola wejściowe tak małe, jak to tylko możliwe, aby zmniejszyć prawdopodobieństwo, że haker będzie w stanie wcisnąć kod SQL do pola bez jego obcięcia (co zwykle prowadzi do błędu składni T-SQL).

IMHO, to jest po prostu gówno. Używanie długości pól wejściowych do ochrony przed wstrzyknięciem SQL to straszna rada:

  • Jedynym poprawnym sposobem ochrony przed wstrzyknięciem SQL jest użycie przygotowanej instrukcji. Dane wejściowe są parametrem zapytania i nigdy nie będą używane jako tekst SQL.
  • Rozmiar pola należy kontrolować po stronie serwera , ponieważ nigdy nie możesz ufać temu, co przychodzi w żądaniu - może to być sfałszowane - i powinno się go używać do oczyszczania danych przed użyciem w warstwie biznesowej lub w magazynie bazy danych.
  • Porada dotycząca korzystania z czegokolwiek innego niż najlepsze praktyki jest mylące dla początkujących programistów.
benrifkah
2017-03-01 03:10:19 UTC
view on stackexchange narkive permalink

Rozważ zapytanie:

  wybierz * z tweetówWHERE RowNum > = [offset] AND RowNum < [offset] + [limit]  

Gdybyś mógł wstawić jedną niecałkowitą liczbę (na przykład literę „a”) dla offset , zapytanie dałoby składnię błąd i żadne posty nie pojawią się z wymaganiem „wyników niezgodnych z projektem” w celu spowodowania szkód. Jeśli możesz wstrzyknąć pusty ciąg, uzyskasz ten sam efekt z ładunkiem o zerowej długości. Wstrzyknięcie komentarza końcowego byłoby stratą dwóch znaków;)

Atakujący może to wykorzystać w ataku typu „odmowa usługi” (inaczej niż w przypadku zalewania sieci zwykle związanego z DoS, jednak nadal DoS). W zależności od odmowy usługi może to być katastrofalne.

Ponieważ inne odpowiedzi sugerują, że długość pola nie ma wpływu na wpływ iniekcji SQL. Przygotowane, sparametryzowane instrukcje są drogą do rozwiązania, jak wspomniano w OWASP SQL Injection Prevention Cheat Sheet.

Odmowa usługi i wstrzyknięcie SQL to dwie bardzo różne rzeczy.Ta odpowiedź nie oferuje niczego pomocnego, co nie zostało już uwzględnione w istniejących odpowiedziach.
Prawidłowo, wstrzyknięcie SQL jest jedną z form kategorii „ataku polegającego na wstrzykiwaniu”, która może przynieść wiele różnych celów, w tym odmowę usługi.Odmowa usługi jest techniką, którą można osiągnąć za pomocą różnych wektorów.Powszechny jest powódź rozproszona.Jednak każda technika, która powoduje, że usługa nie odpowiada, jest właściwie klasyfikowana jako atak typu „odmowa usługi”.Może to obejmować wstrzyknięcie SQL.Moja odpowiedź wyjaśnia, jak można to zrobić przy zerowej liczbie znaków.Zawiera również łącze do ściągawki OWASP SQL injection Prevention.Dziękuję za wskazanie, że powinienem je podkreślić.
MikeSchem
2017-03-02 02:14:18 UTC
view on stackexchange narkive permalink

No.

Prosty przykład jednoznakowego wstrzyknięcia SQL:

  ` 

Spowoduje to wyświetlenie błędu, który byłby przykładem „zwracania wyników nieprzeznaczonych przez projekt”. Wiele razy można wykorzystać błędy, aby uzyskać informacje, które pomogą później w exploicie.

Może mógłbyś dodać wyjaśnienie, w jaki sposób ten zastrzyk może być szkodliwy?
Byłby to błąd, który byłby przykładem „zwracania wyników niezgodnych z projektem”. Często błędy mogą być wykorzystane do uzyskania informacji, które pomogą później w exploicie.
Dzięki!Pozwoliłem sobie dołączyć twoje wyjaśnienie do odpowiedzi.
Dan
2017-03-03 00:27:35 UTC
view on stackexchange narkive permalink

Tak.

Maksymalna długość wynosi zero. Jedynym sposobem na zabezpieczenie niezaufanych danych wejściowych przez maksymalną długość, bez innych walidacji lub kontroli, jest całkowite zignorowanie danych wejściowych zaczynających się od indeksu 0.

Jest tu wiele innych (lepszych) odpowiedzi, ale ta służy do odpowiedzi na teoretyczne pytanie, jak zachować bezpieczeństwo, gdy długość pola jest jedynym narzędziem, jakie masz do dyspozycji.

Szczerze mówiąc, nie jestem przekonany, że wystarczająco sprytny napastnik nie byłby w stanie wykonać ataku bez postaci.
Zgodnie z innymi komentarzami powyżej - gdzie jakiekolwiek wyniki nieprzeznaczone do zaprojektowania są jakąś formą wstrzyknięcia SQL;Czy byłoby również słuszne stwierdzenie, że jakiekolwiek zachowanie nie zamierzone przez projekt jest formą wstrzyknięcia Sql (nawiązując do przykładu snu (60) powyżej .. co było trochę fajne :)? Zatem wstrzyknięcie SQL o długości 0 niekoniecznie musiałoby obejmować SQL ... tak długo, jak można związać połączenie?
@Dan cóż, Jezu, gdybym wiedział, że pójdę dalej i zrobię środek zaradczy.To jest ogólny problem z bezpieczeństwem ... Uważamy, że jest bezpieczny, dopóki ktoś atakujący nie udowodni, że tak nie jest.
Spencer Williams
2017-03-03 05:47:59 UTC
view on stackexchange narkive permalink

Długość pola nie będzie miała nic wspólnego z wstrzyknięciem SQL, ponieważ taki atak działa po prostu poprzez wykomentowanie poprzedniego kodu i uruchomienie kodu ataku, więc długość dowolnego pola nie wpłynie na tę strategię.

Myślę, że OP chodzi o to, że aplikacja nie pozwoli dowolnej ilości tekstu na dotarcie do bazy danych - nadal jest obcięty na określonej długości.
Almenon
2018-08-02 20:38:10 UTC
view on stackexchange narkive permalink

Jest tu dużo teorii, ale nie ma rzeczywistych przykładów. Kiedy znalazłem prawdziwą lukę w zabezpieczeniach sql injection (teraz załataną), próbowałem użyć pól wejściowych o długości około 30 znaków. To było bardzo frustrujące, ponieważ zajęło mi trochę czasu, zanim zorientowałem się, że po 30 znakach wszystko zostało usunięte, a 30 znaków nie pozostawiło mi miejsca na wiele.

(wiele przykładów wtrysku sql ma prosty sql "jak select * z tabeli gdzie id = @id", rzeczywisty sql zazwyczaj będzie dużo bardziej skomplikowany)

Możesz uzyskać fantazyjne z twoimi danymi wejściowymi, a ekspert sql prawdopodobnie mógłby użyć kilku sztuczek, aby zmniejszyć liczbę ładunków. Ale bez względu na to, jak trudny jesteś, jeśli chcesz wybrać jakąś długą nazwę tabeli, będziesz potrzebować do tego wielu znaków.

W każdym razie, kiedy przełączyłem się na użycie pola wejściowego z ponad 1000 znaków Znalazłem to dużo dla sql injection.

Biorąc to pod uwagę, podobnie jak wielu komentatorów powyżej powiedziałem: Najlepszą obroną przed sql injection są przygotowane oświadczenia



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...