Webová bezpečnost - SQL injection 1

1. dubna 2007 v 9:20 | Zidgor |  Web
V minulém článku jsem sliboval, že si dnes řekneme něco HTTP a HTTPS. Rozhodl jsem se však toto téma prozatím vynechat pro jeho nezáživnost. Uvedu ho v budoucnu jako součást některého z dalších dílů. Dnes nás tedy čeká lehký úvod do problematiky útoku SQL injection.

SQL injection je velice nebezpečná hackerská technika. Pokud se ptáte, která hackerská technika není nebezpečná, tak máte pravdu. Všechny jsou totiž nebezpečné.Avšak SQL injection může mít katastrofické následky pro vaši databázi!

SQl injection, jak už název napovídá, souvisí s databázovým jazykem SQL a posíláním dat do subsystému. To se týká všech serverů na databáze (MySQL, PostgreSQL, Microsoft SQL server apod.)

Nesprávně ošetřená databázová aplikace se může dostat pod plnou kontrolu případného hackera. A s ním bohužel i celá naše databáze.V nejhorším případě celý server.

Nejhorší na tomto typu útoku je to, že je ve své podstatě velice jednoduchý.

Představme si například systém pro přihlašování do administrační části webu. Přihlašovací údaje jsou v databázi v tabulce USERS. Tabulka obsahuje položky NAME a PASS, do kterých se dívá při požadavku o přihlášení uživatele.
Dále máme formulář který posílá data scriptu pro přihlášení. Takový formulář může vypadat třeba takto (vynechávám tagy pro grafickou úpravu formuláře) :

<form action="login.php" method="POST">
<input type="text" name="jmeno" value="Zadejte jmeno">
<input type="password" name="heslo">
<input type="submit" name="Ok" value="Login">
</form>

Tento formulář odešle údaje uživatele do scriptu login.php který může vypadat následovně :

<?
if($_POST) :
MySQL_Query("SELECT * FROM USERS WHERE NAME=$_POST(jmeno) AND PASS=$_POST(heslo)");
//NÁSLEDOVALO BY SPRACOVÁNÍ A PŘESMĚROVÁNÍ
endif;
?>

Normální aplikace, řeknete si. Ano pokud formulář vyplní normální zaregistrovaný uživatel tak ano, ale co když je za formulářem hacker??? V tu chvíli se naše aplikace stává děravou a naprosto
nepoužitelnou.

Útočníkovi v tomto případě stačí základní znalost SQL jazyka. Tedy přesněji řečeno tagu --, který v SQL označuje začátek komentáře.

S naším dotazem pak může udělat toto :
SELECT * FROM USERS WHERE NAME='josef' -- AND PASS=$_POST(heslo)

Již určitě vidíte co se stalo. Náš hacker se přihlásil za uživatele jménem Josef tak, že z části dotazu udělal komentář. Tato aplikace se dál vůbec nestarala o to, jestli Josef zadal správné heslo.

Tak a je to jsme na konci dnešního dílu. Byl to jen lehký úvod naznačující jak je lehké udělat děravou aplikaci. Dnešní příklad je dosti nebezpečný, ale věřte mi, že to zdaleka není ten nejnebezpečnější. Příště se SQL injection podíváme na zoubek trošku více a možná vám dám první lekci jak se této hackerské technice bránit.
 

Buď první, kdo ohodnotí tento článek.

Komentáře

1 Zidgor Zidgor | 1. dubna 2007 v 15:09 | Reagovat

V příkladu je samozřejmostí vytvořit spojení s databází. Neůmyslně jsem to vynechal.

Do kódu by patřily ještě příkazy MySQL_Connect() a MySQL_Select_DB()

Nový komentář

Přihlásit se
  Ještě nemáte vlastní web? Můžete si jej zdarma založit na Blog.cz.
 

Aktuální články

Reklama