Autor Zpráva
Michalek
Profil
Zdravim, pred chvili jsem se doslechl o SQL injection a zamrazilo me.

Chtel jsem se zeptat; testuju pro jistotu svoje skripty a mam tam jeden ktery mozna jde nabourat:

$dotazclanek=mysql_query("select titulek from clanky where link='".$GLOBALS["cisloclanku"]."'",$GLOBALS["dbspojeni"]);

promenna cisloclanku prochazi bez kontroly.
lze to nejakym zpusobem "nabourat"?

zkousel jsem

?cisloclanku=200'",$GLOBALS["dbspojeni"]); mysql_query(dalsidotaz); --

ale nastesti to hodilo chybu (ovsem kdyz presne ten stejny dotaz hodim primo do zdrojaku tak funguje; znamena to tedy ze si to mysql hlida sama? to by bylo dobre)

PS: NEchci odpovedi abych ji prohnal nejakou kontrolou
thingwath
Profil
No, jednak se obsah proměnné nevykonává jako kód, takže přidání mysql_query nic neovlivní a hlavně, MySQL pokud vím neumožňuje uvést dva příkazy v jendom mysql_query, takže tohle riziko není tak hrozné.

U jiné databáze by třeba šlo ?cisloclanku=200'; DROP DATABASE x; což by bylo dost nepříjemné.

Bylo by dobré ošetřit práva pod kterými se skript připojuje k databázi. Pokud jenom vybírá, tak by nemusel mít práva pro zápis. Ale u MySQL by to právě kvůli nemožnosti poslat víc příkazů nemělo být tak zásadní.

Ovšem, určitě si dej velký pozor u příkazu jako DELETE a UPDATE, tam je kontrola určitě nutná.
Michalek
Profil
Ď.
Toto téma je uzamčeno. Odpověď nelze zaslat.