SQL injection

From mediawiki.org
This page is a translated version of the page SQL injection and the translation is 100% complete.

Přehled

SQL injection je typ útoku, který používá zranitelnosti při ověřování vstupu aplikace nebo zadávání dat pro dotazy SQL.

Když je útok úspěšný, umožňuje útočníkovi vložit data do existujícího SQL dotazu. Útočník pak může být schopen získat soukromá data, způsobit odmítnutí služby nebo způsobit jiné nezamýšlené reakce. V nejhorším případě by vložený kód útočníkovi umožnil získat plnou kontrolu nad systémem zneužitím několika zranitelností v databázovém serveru, systémových nástrojích a operačním systému.

Přehled útoků SQL injection najdete na stránce SQL Injection na Wikipedii.

Příklad

Následující úryvek kódu by útočníkovi umožnil spouštět vlastní příkazy SQL (a jedná se o chybu syntaxe v Oracle).

$limit = $wgRequest->getVal( 'limit' );
$res = $db->query( "SELECT * from kitties LIMIT $limit" );

Preferovaný způsob spuštění výše uvedeného dotazu by byl:

$limit = $wgRequest->getVal( 'limit' );
$limit = intval( $limit ); // OPTIONAL validation
$res = $db->select( 'kitties',
                    '*',
                    false,
                    __METHOD__,
                    array( 'LIMIT' => $limit ) // REQUIRED automatic escaping
);

K zneužití této chyby zabezpečení a načtení e-mailových adres registrovaných uživatelů wiki by útočník použil řetězec GET:

?limit=%201%20union%20select%20user_email%20from%20user;


SQL Injection a MediaWiki

MediaWiki má vlastní rozhraní pro generování SQL, které se ukázalo jako efektivní pro eliminaci zranitelností vkládání SQL. Rozhraní pro generování SQL také poskytuje abstrakci DBMS a funkce, jako jsou předpony tabulek.

Aby byla MediaWiki v bezpečí před SQL injection: