Autor Zpráva
milbr
Profil *
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']));
Na serveru musím použít toto.
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
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 *
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
milbr:
a to mi hlásí chybu.
jakou?
Aleš Janda
Profil
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 *
panther:
Omlouvám se dal jsem tam špatný kód.
Při tomto zápisu

if(isset($_POST['vstup'])) {
include "vlozeny_soubor.php";
}
else {
 
}
mi to hlásí chybu: Fatal error: Can't use function return value in write context in C:\ComplexWebServer\http_docs...........

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 *
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
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 *
Pro ošetření POST dat pro další práci bych měl použít raději třeba htmlspecialchars ?

Děkuji
panther
Profil
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
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 *
Aleš Janda:
OK moc děkuji za vysvětlení.

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: