Dynamiczny sql i problemy z nim związane - bezpieczeństwo baz danych


Bardzo dobrze sprawdzającą się techniką jest wpisywanie niepoprawnych zapytań i czerpanie informacji z komunikatów o błędach. A co możemy się dowiedzieć? Spróbujmy zalogować się jako ' having 1=1. Microsoft sql server wyrzuci wtedy błąd postaci:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.id' is
invalid in the select list because it is not contained in an aggregate
function and there is no GROUP BY clause.


No i proszę, nazwa tabelki i nazwa pierwszego pola. Jeśli chcemy poznać kolejne pola wystarczy dopisać group by users.id do zapytania przed having i wyskoczy nam błąd, że druga kolumna nie jest w klauzuli group by.
Można poznać typy pól tabelki podając dane nieodpowiednich typów i czytając komunikat o błędzie, w którym będzie napisane, że oczekiwano, np typu number, a użytkownik podał typ varchar.
Ale to jeszcze nie koniec.


dalej