Wszystko, co widziałem w przypadku ataków typu SQL injection, wydaje się sugerować, że sparametryzowane zapytania, szczególnie w procedurach przechowywanych, są jedynym sposobem ochrony przed takimi atakami. Podczas pracy (w średniowieczu) procedury składowane były postrzegane jako kiepska praktyka, głównie dlatego, że były postrzegane jako mniej konserwowalne; mniej testowalne; wysoce sprzężony; i zablokował system w jednym dostawcy; ( to pytanie obejmuje kilka innych powodów).
Chociaż kiedy pracowałem, projekty były praktycznie nieświadome możliwości takich ataków; przyjęto różne zasady w celu zabezpieczenia bazy danych przed różnego rodzaju uszkodzeniami. Reguły te można streścić jako:
- Żaden klient / aplikacja nie miała bezpośredniego dostępu do tabel bazy danych.
- Wszystkie dostępy do wszystkich tabel odbywały się za pośrednictwem widoków (a wszystkie aktualizacje tabel podstawowych dokonywano za pomocą wyzwalaczy).
- Wszystkie elementy danych miały określoną domenę.
- Żaden element danych nie mógł być zerowalny - miało to implikacje, które powodowały, że DBA od czasu do czasu zgrzytały zębami; ale został wymuszony.
- Role i uprawnienia zostały odpowiednio skonfigurowane - na przykład ograniczona rola dająca tylko widokom prawo do zmiany danych.
Czy zatem zestaw (wymuszonych) reguł takich jak ten (choć niekoniecznie ten konkretny zestaw) jest odpowiednią alternatywą dla sparametryzowanych zapytań w zapobieganiu atakom polegającym na wstrzykiwaniu SQL? Jeśli nie, dlaczego nie? Czy bazę danych można zabezpieczyć przed takimi atakami za pomocą (tylko) określonych środków bazy danych?
EDYTOWAĆ
Podkreślenie pytania zmieniło się nieznacznie w świetle pierwszych otrzymanych odpowiedzi. Pytanie podstawowe bez zmian.
EDYCJA 2
Podejście polegające na sparametryzowanych zapytaniach wydaje się być tylko peryferyjnym krokiem w obronie przed atakami na systemy. Wydaje mi się, że bardziej podstawowa obrona jest pożądana i może sprawić, że poleganie na takich zapytaniach nie będzie konieczne lub mniej krytyczne, nawet w celu obrony przed atakami iniekcyjnymi.
Podejście zawarte w moim pytaniu opierało się na „zbrojeniu” bazy danych i nie miałem pojęcia, czy jest to realna opcja. Dalsze badania sugerują, że istnieją takie podejścia. Znalazłem następujące źródła, które dostarczają wskazówek dla tego rodzaju podejścia:
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
Główne cechy, które wziąłem z tych źródeł to:
- Rozbudowany słownik danych w połączeniu z rozbudowanym słownikiem danych bezpieczeństwa
- Generowanie wyzwalaczy, zapytań i ograniczeń ze słownika danych
- Minimalizuj kod i maksymalizuj dane
Chociaż dotychczasowe odpowiedzi są bardzo przydatne i wskazują na trudności wynikające z pominięcia sparametryzowanych zapytań, ostatecznie nie odpowiadają one na moje pierwotne pytanie (podkreślone teraz pogrubioną czcionką).