Jump to content

php Bezpečnost Php #1 - Sql Injection


FlexFellovic

Recommended Posts

Sql injection je druh napadení webu, kdy může útočník přes nezabezpečené formuláře posílat příkazy databázi,

kteár je poté vykoná.Webová aplikace neochráněná proti SQL Injection je před úžotčníkem rovnou odsouzená k "smrti.

Protože útočník se pomocé této díry může nejen přihlásit jako jakýkoli uživatel , ale také může smazat celou databázi

Takže to by bylo k úvodu na SQL injection..

 

tady vám dám jednoduchou ukázku SQL Injeciton útoku :

Pokud webová aplikace nepodporuje při přihlašování hashování hesel nebo odstranění nebezpečných řetezců pomocí php funkce

mysql_real_escape_string

... tudíž stačí zadat libovolné přihlašovací jméno a jako heslo vyplnit např..

x' or 'a' = 'a

Nezabezpečený sql dotaz teda bude vypadat takto :

ELECT * FROM fusion_users WHERE user_name='FlexFellovic' AND user_password='x' or 'a' = 'a';

 

Při tomto dotazu se PHP ptá MySQL databáze, jestli existuje uživatel s tímto jménem a heslem. útočník ovšem přidal podmínku že

'a' = 'a'

, což je logicky vždy pravdivé a proto dotaz vrátí pravdivou hodnotu a přihlásí vás.

Horší útok je ovšem, pokud přes nezabezpečený script útočník maže web.

 

Pokud tedy například do políčka hesla přidá následující :

'; DROP TABLE fusion_users; --

(místo fusion_users může být jakákoliv tabulka v mysql)

 

, SQL dotaz se vykoná a výsledek je ten, že sice není útočník přihlášen jako administrátor, ale smaže tabulku obsahující informace o uživatelích.

 

Ochrana proti tomuto útoku

 

Nejjednodušší ochranou, jak jsem již psal, je použití funkce

mysql_real_escape_string

. Tato funkce je přizpůsobena tak, aby odstranila z dat veškerý nebezpečný obsah. Zabezpečený SQL dotaz v PHP (PHP-Fusionu) tedy poté vypadá například takto:

$result = dbquery("INSERT INTO ".DB_BLAH." VALUES (NULL, ".mysql_real_escape_string($uzivatelsky_vstup).")");

 

 

Další dobrou ochranou je omezit práva pro MySQL uživatele na změny, které používáte.

Pokud tedy na webu nikde nepoužíváte mazání tabulek, je dobré MySQL uživateli tuto funkci zakázat a tak zabezpečit web proti smazání DB při útoku.

 

 

stavěno pro php fusion !

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...