Autor | Zpráva | ||
---|---|---|---|
Musilda Profil |
#1 · Zasláno: 14. 6. 2009, 11:20:47
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 |
#2 · Zasláno: 14. 6. 2009, 11:42:59 · Upravil/a: Nox
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 |
#3 · Zasláno: 14. 6. 2009, 11:55:17
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 |
#4 · Zasláno: 14. 6. 2009, 12:23:29
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. |
||
Časová prodleva: 8 dní
|
|||
fos4 Profil |
#5 · Zasláno: 22. 6. 2009, 17:54:33
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.. |
||
Časová prodleva: 15 let
|
0