, nebo Jak Se Chránit Uživatelská Data Z SQL Injection

xkcd

Zábavná Fakta:

SQL injection byl asi docela hodně, od té doby, co webové stránky mají uložená data v databázích.

projekt Open Web Application Security hodnotil útoky injekcí jako jednu z nejlepších hrozeb 10, kterým čelí webové aplikace v roce 2017.,

SQL injection je stále zodpovědný za mnoho velkých úniků dat. V roce 2016 byly porušeny databáze voleb Illinois a Arizona State Board of Elections. Zatímco žádné informace, bylo odcizeno v Arizoně, Illinois útočníci měli přístup k volební údaje, včetně jména, adresy, datum narození, pohlaví a částečné čísla Sociálního Zabezpečení, pro asi 80.000 lidí.⁴

to je děsivé, co to je?

SQL injection je typ útoku, který se zaměřuje na databázi aplikace vložením nezamýšleného kódu do uživatelských vstupních polí., Využitím syntaxe SQL může útočník použít vstupní pole k zachycení informací z těchto databází — včetně věcí, jako jsou hesla a čísla kreditních karet. Někdo by dokonce mohl převzít kontrolu nad vaší databází nebo odstranit všechny informace, které obsahuje.

Jak To Funguje?

SQL Injection funguje pomocí informací vložených do pole pro manipulaci s odpovídajícím příkazem SQL do provádění neúmyslné akce.,

Zde je základní příklad:

SELECT * FROM customers WHERE name = " + user_name + ";

V tomto příkladu řekněme, že proměnná uživatelské_jméno je vytvořen přímo z vstup uživatele na webových stránkách. Tento řetězec je vložen do výše uvedeného příkazu SQL a všechna pole týkající se tohoto uživatelského jména jsou vrácena. O nic nejde.

ale co se stane, když někdo napíše Steve “ nebo 1=1; – jako své uživatelské jméno? pak by generovaný SQL byl tento:

SELECT * FROM customers WHERE name = "Steve" OR 1=1;--";

protože 1=1 je vždy pravda, vrátí se všechna data v tabulce. To Není Dobré!,

Let’s take one more look at that comic.

xkcd

The son’s name is Robert’); DROP TABLE students; — What would that do exactly?,

No, můžeme předpokládat, že pokud se Malý Bobby Tabulky byl přidán do školní databáze studentů, SQL příkaz bude vypadat nějak takto:

INSERT INTO students (name) VALUES ('<Student Name>');

… a když jsme se vložit Bobby…

INSERT INTO students (name) VALUES ('Robert'); DROP TABLE students;--');

Od Bobbyho jméno obsahuje ); HODNOTY argumentu je uzavřen ve středu jeho jméno a text, který následuje DROP TABLE studenty je nový SQL příkaz, který smaže celou tabulku. Konečně — na konci komentáře se zbývající SQL, v podstatě ignoruje zbytek původního kódu a ujistit se, že nedojde k žádné chybě.,

, Co Říkáte, Je Moje Data Budou Nikdy Být Zase V Bezpečí?

ne! Ve skutečnosti existuje mnoho kroků, které můžete podniknout, abyste se ochránili před tímto druhem útoku. Podívejme se na několik:

  1. dezinfikujte Data. Prvním krokem je ovládání toho, co může uživatel zadat. Nejlepší způsob, jak toho dosáhnout, je omezit typy vstupů povolených pro určité pole., Například v poli telefonního čísla můžete povolit pouze číselný vstup nebo v poli e-mailu povolit pouze znaky, které lze nalézt na platné e-mailové adrese. Je zřejmé, že některá pole budou vyžadovat znaky, které by mohly být použity při útoku, takže tato metoda není nepřekonatelná.
  2. konfigurovat hlášení chyb. Výchozí hlášení chyb v systémech správy databází má často informace o ladění vývojáře. To může útočníkovi vrátit užitečné informace, jako jsou názvy tabulek nebo názvy sloupců., Ujistěte se, že tento typ informací nezobrazujete externím uživatelům, protože by to mohlo usnadnit život potenciálního útočníka.
  3. použijte vázané parametry. Vázané parametry umožňují ukládat uživatelská data do proměnné a poté je vložit do příkazu SQL, který byl vytvořen pomocí zástupných symbolů. Vzhledem k tomu, že příkaz SQL a proměnná jsou odesílány na server samostatně, vázané parametry jsou dobré při ochraně před injekcí. Vezmi toho Bobbyho T!, Příkladem vázané parametry v aktualizaci metoda v Ruby by měl vypadat takhle:
def update sql = <<-SQL UPDATE students SET name = ?, grade = ? WHERE id = ? SQL DB.execute(sql, )end

je To bláznivé myslet si, že něco tak jednoduchého a dobře pochopil, je stále zodpovědný za mnoho velkých případů narušení bezpečnosti údajů., Dokonce i ve vysoce sledovaných případech jako registrace voličů hacky uvedeno výše, a nedávné Equifax porušení (což nebylo vzhledem k SQL injection, ale na podobné zranitelnosti, které společnosti se nepodařilo adresa), kořen zranitelnost přijde na lidské chyby a nedostatek pozornosti k detailu. Čas na pečlivé přemýšlení o problému nám může výrazně pomoci chránit uživatelská data před běžnými porušeními, zejména injekcemi SQL.