Co je SQL Injection?

Jedna z největších tříd webových zranitelností je známá jako „SQL Injection“ nebo SQLi. Structured Query Language, neboli SQL, je jazyk používaný k interakci s většinou databází, i když se v závislosti na databázi používá řada variant jazyka plošina. Jakákoli webová stránka, která uchovává uživatelská data, jako jsou informace o účtu, nebo poskytuje funkci nahrávání uživatele, jako je webová stránka hostující obrázky, bude k ukládání těchto dat používat databázi.

Tip: SQL se obecně vyslovuje buď jako „ess cue ell“ nebo „sequel“, přičemž první možnost je běžnější v britské angličtině a druhá v americké angličtině. Obě výslovnosti jsou obecně chápány v kontextu mluvení o databázích.

Co je SQLi?

SQLi je zranitelnost, kde weboví vývojáři navrhují kód, který komunikuje mezi webový server a databáze neimplementují ochranu proti příkazům SQL zadávaným a uživatel. Problém je v tom, že je možné uniknout z databázových příkazů a přidat nové argumenty nebo zcela nový příkaz. Změněný nebo druhý příkaz databáze může provádět řadu akcí, včetně potenciálně rozsáhlých smazání nebo úniku dat.

Využití se obvykle točí kolem toho, aby existující příkazy byly pravdivé za všech okolností, nebo poskytování druhého dávkového příkazu, který provádí konkrétní akci, jako je smazání nebo zobrazení všech dat. Například příkaz SQL pro přihlášení na web může zkontrolovat, zda zadané uživatelské jméno a heslo odpovídá záznamu v databázi. Chcete-li se pokusit získat přístup, zneužití SQL injection se může pokusit přidat klauzuli „nebo pravda“, například „nebo 1=1“. To by znamenalo příkaz ve stylu „přihlaste se [tímto] uživatelským jménem, ​​pokud je heslo [toto] nebo je toto prohlášení pravdivé“.

Jak zabránit SQLi

SQLi bývalo velmi běžným způsobem, jak weby prolomily svou databázi a následně ji unikly online. Díky společnému úsilí zajistit, aby povědomí o bezpečnosti bylo součástí školení vývojářů, byla tato třída zranitelnosti z velké části vyřešena a již se vyskytuje jen zřídka.

Správnou metodou, jak zabránit SQLi, je použít připravené příkazy, známé také jako parametrizované dotazy. Tradičně jsou příkazy SQL deklarovány a během této deklarace je do nich zřetězen uživatelský vstup. S připravenými příkazy je vypsán příkaz databáze a poté příkaz spustí samostatná funkce a vloží uživatelská data. I když se to může zdát jako malý rozdíl, zcela mění způsob, jakým je s příkazem nakládáno. Rozdíl brání spouštění jakýchkoli smysluplných příkazů SQL a zachází se všemi uživatelskými vstupy jako s řetězcem, což zabraňuje vkládání SQL.