
Gabriel Brooks
0
4178
908
Svět zabezpečení internetu je sužován otevřenými porty, zadními vrátkami, bezpečnostními otvory, trojskými koni, červy, zranitelnostmi v bráně firewall a spoustou dalších problémů, které nás každý den drží na nohou. Pro soukromé uživatele se viry a červy zdají být nejhorší z možností. Ale pro každého, kdo provozuje databázi, je injekce SQL jednou z nejničivějších bezpečnostních chyb.
Databáze jsou v oblasti počítačů velmi cenné. Jsou nezbytné pro ukládání dat jako paměti a pro zobrazení různých vztahů mezi datovými body. Tady na MakeUseOf máme řadu databází věnovaných různým úkolům: jednu pro všechny naše články, jednu pro naši uživatelskou základnu, druhou pro náš program odměn a seznam pokračuje. Co se stane, když jsou naše databáze nebezpečně napadeny - nebo dokonce zničeny?
Pokud nemáte skutečný přístup k databázi, je injekce SQL jednou z nejvýznamnějších forem útoku. Pokračujte ve čtení a zjistěte, co to je přesně a jak může být tak nebezpečné.
Co je to vlastně SQL?
Abyste pochopili vstřikování SQL, musíte nejprve porozumět tomu, co je SQL a jak souvisí s webem. SQL, což je zkratka pro Structured Query Language, je typ programovacího jazyka optimalizovaného pro správu tabulkových dat. Pro všechny záměry a účely je to jen způsob, jak programátoři komunikovat s databází a dávat jí příkazy.
Kdykoli se na databázi pracuje, jsou zadávány a zpracovávány příkazy SQL. Pokud přemýšlíte o všech dobách, kdy se jedná o databázi, zjistíte, že se to stane jen v několika případech:
- Když je třeba vložit nová data,
- Když je třeba změnit aktuální data,
- Když je třeba odstranit stará data,
- Když je třeba určitou část dat vyhledat a načíst.
Kdykoli je třeba provést jednu z těchto akcí, příkaz SQL se provádí někde na serveru. Programátor většinou zjistí, kdy a kde se tyto příkazy SQL vyskytují ve zdrojovém kódu. Existují však nevyhnutelné okolnosti, kdy uživatel může vynutit manipulaci s databází - a tyto příležitosti jsou všude kolem vás.
Už jste se někdy přihlásili na web? Už jste někdy zveřejnili komentář k článku blogu nebo odpověď ve vláknu fóra? Poslali jste někdy příteli zprávu na Facebooku? Napsali jste e-mail v Gmailu? Hledali jste web na Googlu? Kdykoli na webu uvidíte vstupní pole (uživatelské jméno, heslo, vyhledávací dotaz, okno se zprávou atd.), Je tento text odeslán do databáze a jednal podle.
Nyní, pokud se uživatel se zlými úmysly chtěl manipulovat s databází, není pro něj příliš mnoho možností. Jednou z možností by bylo získat aktuální fyzický přístup k serveru a zničit jej na jeho základně. Ale jinak by pro uživatele se zlými úmysly mělo největší smysl ukradnout existující příkaz SQL při použití vstupního pole, což nutí server, aby provedl příkaz odlišný od původně zamýšleného.
Technika vstřikování SQL
Tento akt únosu existujícího příkazu SQL je tím, co se týká injekce SQL. Proč se tomu říká injekce? Protože únos příkazu SQL vyžaduje, aby uživatel při použití vstupního pole vložil vlastní kód SQL. Zní to matoucí? Dovolte mi to ilustrovat příkladem.
Zvažte přihlašovací stránku MakeUseOf. Když zadáte své uživatelské jméno a heslo a stisknete “Předložit“, vynucujete webový server, aby vygeneroval příkaz SQL, který zahrnuje informace, které jste právě zadali - tedy vaše uživatelské jméno a heslo. Databáze obdrží informace, ověří, že kombinace uživatelského jména a hesla je správná, a poté vám poskytne správný přístup do dalších oblastí webu.
Nyní si představte, co by se stalo, kdyby uživatel se zlými úmysly nezadal své uživatelské jméno a heslo, ale místo toho zadal jako své uživatelské jméno příkaz SQL? Pokud není kód serveru správně zabezpečen, databáze obdrží chybné uživatelské jméno (což je opravdu příkaz SQL) a ve skutečnosti jej spustí jako příkaz.
A proto se tomu říká injekce. Příkaz SQL je vložen do databáze prostřednictvím zcela legitimních prostředků, které manipulují tak, že nakonec udělá něco, co nebylo zamýšleno.
Pokročilý příklad
Až dosud jsem popsal SQL vstřikování na vysoké úrovni, aby kdokoli rozuměl - dokonce i těm, kteří nemají znalosti programování. V této sekci uvedu skutečný příklad jak tato technika je možná. Pokud jste nováčkem SQL nebo jste se s programováním ještě nikdy nezabývali, můžete tuto sekci klidně přeskočit.
Při přihlašování na web je možný způsob, jak by se kód mohl napsat v SQL:
SELECT user_id
FROM users_db
WHERE username = "$ username" AND password = "$ password"
Příkaz v podstatě žádá databázi, aby vrátila vše user_ids ze stolu users_db které odpovídají zadané kombinaci uživatelského jména a hesla. Vypadá dobře a dandy, správně?
Předpokládejme, že přihlašovací formulář dostal následující vstupy:
Uživatelské jméno: David
Heslo: fubar 'OR' x '=' x
Všimněte si, že pole hesla nezačíná a nekončí apostrofem. Když server obdrží tento pokus o přihlášení, vezme vše, co je uvedeno v poli heslo, a nahradí jej místo $ hesla v kódu. Výsledný příkaz SQL bude vypadat takto:
SELECT user_id
FROM users_db
KDE uživatelské jméno = "David" A heslo = 'fubar 'OR' x '=' x'
Když server spustí tento příkaz, bude poslední část tohoto příkazu SQL vždy návrat pravda. To znamená, že uživatel se zlými úmysly mohl zadat libovolné uživatelské jméno a okamžitě získat přístup k tomuto účtu, protože by přihlášení fungovalo bez ohledu na to, zda má správné heslo..
Přihlašování na něčí účet je samozřejmě poněkud mírným přestupkem, když jej porovnáte se všemi ostatními možnými pokusy o hack: smazání celých databází, utlumení všech dat nebo dokonce kradení data v databázích.
Profesionální weboví vývojáři se v prevenci takových triků zlepšují a zlepšují, ale jednou za čas uslyšíte, že společnost utrpěla ztráty při útoku SQL injekcí. Když se to stane, nyní víte, co to znamená a jak je to možné.
Image Credit: Intro Image Via Shutterstock, Schéma databáze Via Shutterstock, HACKED Via Shutterstock