Autor Zpráva
Musilda
Profil
Zdravím, mám tento konkrétní problém

V databázi, v které mám uloženy sportovní zápasy k tipování, jsem měl několik položek, které jsem musel vymazat. Proto mám id zápasů 234, pak záznamy chybí a pokračují 241. Zapasy končí id 249. Zjistil jsem, že dva uživatelé využili mezery v zabezpečení a uložili do db tipy na zápasy které neexistují. A to vždy na id-235, id-241 a id-250. Vždy o jednotku rozdílné id, než id existujícího zápasu. Předpokládám, že název pro takovýto útok je SQL injection a že pomocí odeslání chybného dotazu, se jim podařilo dostat do db a změnit tipy. Může mi zde někdo popsat prosím postup takového útoku?


Díky za tipy a rady
Musilda
Nox
Profil
No, vysvětlím to spíš třeba na výběru uživatele

máme neošetřené
$user = mysql_fetch_array( mysql_query( "SELECT * FROM users WHERE LOGIN='$_POST[login]'") );

a teď tam zadáme uživatelovu hodnotu
$user = mysql_fetch_array( mysql_query( "SELECT * FROM users WHERE LOGIN='' or '1'='1'") );

kde to druhé bude platit vždy a takto vytáhnete prvního vybraného uživatele (jde jednoduše vyzkoušel v phpMyAdminovi)

Mj. co jim přinese sázka na neexistující zápas? Pak nic nevyhrají a peníze nedostanou, ne?
Nemůže se jednat o nějakou chybu na tvé straně?
TomášK
Profil
Zdá se mi, že tohle pravděpodobně není SQL injection - uživatel nepodstrčí část dotazu, ale jen neplatný vstup. Někde máš formulář, kde se odesílají čísla zápasů, na které jde vsadit a někdo si ten formulář upravil tak, aby se odeslalo číslo jiného zápasu - místo 241 se odešle 242 apod. Možná, že se i toto zahrnuje do SQL injection, ale ochrana proti tomu není převedení čísla zápasu na číslo.
Počítej s tím, že ať máš na stránkách jakékoliv formuláře, uživatel ti může poslat jakákoliv data si usmyslí.
Řešil bych to pomocí cizích klíčů v databázi (FOREIGN KEY, REFERENCES). Řeknete, že sloupec zapas_id v tabulce tipy se odkazuje na sloupec id v tabulce zápasy, a pokud tam takový nebude, vložení záznamu skončí chybou.
Musilda
Profil
Nox
No myslím si, že díky chybě dotazu získají další data, která použijí při úpravě svých tipů. Je celkem nepravděpodobné, aby dva lidé měli při čtrnácti tipech třináct správně a jeden špatně, ale naprosto identicky. Přišli na chybu, kterou tam mám. Když chci vypsat tipy, které jsem tipoval, tak prohledávám db pomocí user_id a soutěžního kola. Bohužel jsem si neuvědomil, že někdo může naschvál uložit tip na neexistující zápas a to potom vypíše chybu.
fos4
Profil
TomasK: SQL injection je technika napadení databázové vrstvy programu vsunutím (odtud „injection“) kódu přes neošetřený vstup.
Pokud to co tu pise NOX nebyl SQL Inject tak pak nevim..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: