Autor | Zpráva | ||
---|---|---|---|
milbr Profil * |
#1 · Zasláno: 9. 4. 2012, 19:45:47
Dobrý večer, chtěl bych se zeptat zda hrozí nějaké nebezpečí při použití tohoto zápisu. Když použiji v isset, intval nebo mysql_real_escape_string tak mi to hlásí chybu.
if(isset($_POST['vstup'])) { include "vlozeny_soubor.php"; } else { } Dále bych chtěl poprosit o radu při použití níže popsaného zápisu. Na locale mi funguje toto. if(isset($_POST['login'])) $_SESSION['login'] = mysql_real_escape_string(md5($_POST['login'])); if(isset($_POST['login'])) $_SESSION['login'] = md5($_POST['login']); Moc Vám děkuji za radu a přeji pěkné velikonoce. Milan |
||
panther Profil |
#2 · Zasláno: 9. 4. 2012, 19:49:46
milbr:
„tak mi to hlásí chybu.“ jakou chybu? „zda hrozí nějaké nebezpečí při použití tohoto zápisu.“ jaké nebezpečí? Testuješ jen existenci nějaké POST proměnné, s kterou dále nepracuješ (includuješ názvem nesouvisející soubor). druhá otázka: md5 generuje string, který není nebezpečný, netřeba jej dále ošetřovat. Funkce mysql_real_escape_string slouží, jak jméno napovídá, k ošetření dat, se kterými pracuje MySQL, nikoliv ošetření hodnoty ukládané do session. |
||
milbr Profil * |
#3 · Zasláno: 9. 4. 2012, 20:17:16
panther:
Děkuji za odpověď, pokoušel jsem se ošetřit $_POST takto, a to mi hlásí chybu. Myslel jsem si, že není potřeba testovanou POST hodnotu ošetřovat, děkuji za potvrzení. if(isset($_POST['vstup'])) { include "vlozeny_soubor.php"; } else { } K druhé otázce, mohu používat funkci mysql_real_escape_string při ošetřování vstupních dat i když s nimi MySQL přímo nepracuje? Tedy, jsou touto funkcí vstupní data ošetřena pro další práci? Moc děkuji Milan |
||
panther Profil |
#4 · Zasláno: 9. 4. 2012, 20:19:50
milbr:
„a to mi hlásí chybu.“ jakou? |
||
Aleš Janda Profil |
#5 · Zasláno: 9. 4. 2012, 20:24:12
„mohu používat funkci mysql_real_escape_string při ošetřování vstupních dat i když s nimi MySQL přímo nepracuje? Tedy, jsou touto funkcí vstupní data ošetřena pro další práci?“
Můžeš, pokud teda „ošetření“ má znamenat zmršení dat. Funkce mysql_real_escape_string escapuje znaky pro SQL dotaz, jakékoli použití té funkce mimo sestavování SQL dotazu je nesmyslné. Data na jiných úrovních tím rozhodně ošetřena nebudou. |
||
milbr Profil * |
#6 · Zasláno: 9. 4. 2012, 20:25:26 · Upravil/a: milbr
panther:
Omlouvám se dal jsem tam špatný kód. Při tomto zápisu if(isset($_POST['vstup'])) { include "vlozeny_soubor.php"; } else { } Prosím jaký máte pohled na tu druhou mou otázku? Děkuji Milan Oprava if(isset(intval($_POST['vstup']))) { include "vlozeny_soubor.php"; } else { } |
||
David Klouček Profil |
milbr:
Isset() testuje, zda je proměnná nastavena (zda existuje, hodnotu null ignoruje). Intval() tam nemá co dělat, čeho chceš docílit? |
||
milbr Profil * |
#8 · Zasláno: 9. 4. 2012, 20:34:10
Děkuji, jen jsem se bál zda neexistuje nějaká možnost napadení proměnné již při testování její existence.
Moc Vám Děkuji |
||
Alphard Profil |
#9 · Zasláno: 9. 4. 2012, 20:35:55
milbr:
„mohu používat funkci mysql_real_escape_string při ošetřování vstupních dat i když s nimi MySQL přímo nepracuje? Tedy, jsou touto funkcí vstupní data ošetřena pro další práci?“ Zdá se, že nechápete escapování vzhledem ke kontextu. Podívejte se na http://phpfashion.com/escapovani-definitivni-prirucka Tedy funkci použít můžete, jste-li připojen k db, ale data nejsou dostatečně ošetřena pro jinou aplikaci. (Navíc jsou poškozena, jak tady někdo říkal.) panther: „md5 generuje string, který není nebezpečný, netřeba jej dále ošetřovat“ Konkrétně ano, obecně string (z jiné hashovací funkce) může být nebezpečný i jako vedlejší efekt. Doporučuji ošetřit veškeré vstupy do SQL. |
||
milbr Profil * |
#10 · Zasláno: 9. 4. 2012, 20:38:53
Pro ošetření POST dat pro další práci bych měl použít raději třeba htmlspecialchars ?
Děkuji |
||
panther Profil |
#11 · Zasláno: 9. 4. 2012, 20:43:54
Alphard:
„Doporučuji ošetřit veškeré vstupy do SQL.“ ano, v kontextu md5 výše jsme se ale nebavili o ukládání hashe do DB, ale do session. Co se DB týče, tam je to mysql_real_escape_string jasné.
|
||
Aleš Janda Profil |
#12 · Zasláno: 9. 4. 2012, 20:49:29
milbr:
„Pro ošetření POST dat pro další práci bych měl použít raději třeba htmlspecialchars ?“ Ne. Neexistuje nic jako ošetřená a neošetřená data. Jsou pouze data ošetřená pro konkrétní volání. Funkce htmlspecialchars ošetřuje speciální znaky v kontextu HTML; všude jinde dělá bordel. Funkce mysql_real_escape_string ošetřuje speciální znaky v kontextu SQL; všude jinde dělá bordel. A tak dál. Nejlepší bude, když s POST daty nebudete dělat vůbec nic, jen při každém jejich použití v jiném kontextu je ošetříte vzhledem ke kontextu, kde je chcete použít. Ale až při použití, ne někde na začátku nebo podobně. Stejně jako jakákoli jiná data z úplně jiných zdrojů, nejen z POSTu. |
||
milbr Profil * |
#13 · Zasláno: 9. 4. 2012, 20:56:46
Aleš Janda:
OK moc děkuji za vysvětlení. |
||
Časová prodleva: 11 let
|
0