Autor Zpráva
Mufna
Profil
Zdravím Vás. Co můžu čekat za problémy, když ve formuláři používám tento kód
<input ... value="<?php print (htmlspecialchars(trim($_POST["name"]))); ?>">


a nastavení magic_quotes_gpc = Off . V této situaci by neměl být ošetřen apostrof (ten ale potřebuju např. pro zadávání jména - O'Connor]. Když zapnu magické uvozovky, tak se mi to slashuje a kontrola regulárem, který umožňuje aby v řetězci byl apostrof ale ne \ , selže. A samozřejmě pokud se formulář neodešle z důvodu jiné chyby, tak v políčku se jménem bude O'\Connor + hláška o chybně zadaném jménu (což z pohledu uživatele není pravda, neboť zadal správně O'Connor).
keeehi
Profil
Mufna:
problémy by takto neměli nastat žádné. I kdyby někdo do toho inputu napsal nějaký škodlivý kód, tak se stejně nespustí, protože je to bráno jako řetězec.

problémy by mohli nastat jinde ve scriptu. tam se to někde ošetřit musí. příkad:
- eval($_POST["name"]);
- $sqldotaz = "select * from dtb where jmeno='$_POST['name']'";
Joker
Profil
Mufna:
Ten problém s magic_quotes: Doporučuju si napsat univerzální skript "je-li magic_quotes_gpc zapnuto, odlomítkuj všechny vstupy" (pěkný skript je třeba zde) a dát ho do nějakého univerzálního souboru, vkládaného do všech skriptů.
Petr__
Profil *
Jak psal keeehi, pokud Vám jde jen o ten konkrétní kód, tak je to OK, ale předpokládám, že s těmi daty dále provádíte i další věci, než jen prosté vypsání. Mě osobně nejvíce pomohl tento článek.
Petr__
Profil *
oprava: Mně osobně...
Mufna
Profil
Petr__
předpokládám, že s těmi daty dále provádíte i další věci

Ano, jde to i do DB, tam to ale dál samozřejmě ošetřuju - vlastní :-) funkcí, která používá mysql_real_escape_string. O tu DB mi proto až tak nešlo, spíš o to, co mi můj kód může provést (či neprovést) při vykonávání, tedy zobrazení formuláře včetně hodnot polí, které už uživatel nějak vyplnil. Nejsem sice paranoik, ale dočetl jsem se zde, že tak jak to mám je to špatně a není ošetřen apostrof. I když někde v komentářích pak o tom apostrofu mluví i p. Grudl ve smyslu jak to myslím i já, totiž "a co když je ten apostrof potřeba ponechat jako povolený znak ?". Takže asi řešil podobný problém jako já.

Jinak díky za odkaz, zatím jsem se k tomu nedostal, ale vypadá to přehledně, takže to pročtu.

Joker
Ten problém s magic_quotes: Doporučuju si napsat univerzální skript

Já doufám, že už ho snad nebudu ani potřebovat. Počítám s vypnutou direktivou magic_quotes_gpc. Pokud by byla zapnutá, tak myslím, že na každém normálním hostingu to jde vypnout a někde jsem se dočetl, že v PHP6 bude buď odstraněna (to asi ne, tak pardon), nebo defaultně vypnutá. Takže bych se asi zbytečně zatěžoval něčím, co asi nebudu nikdy (a s výhledem do budoucna, nikam jinam se nekoukám) potřebovat - snad :-o
Petr__
Profil *
Mufna
No já si pořád myslím, že ten první kód máte dobře i podle toho článku Jakuba Vrány, protože pokud to máte uzavřené v uvozovkách ("),

<input ... value="<?php print (htmlspecialchars(trim($_POST["name"]))); ?>">


tak není třeba ošetřovat apostrofy. Apostrofy uzavřené jako hodnota atributu v uvozovkách nezpůsobí přerušení toho atributu a tedy následnou možnost vložení záškodnického kódu (např. XSS). Nebo se pletu?
Mufna
Profil
Petr__
Nebo se pletu?

Snad ne.
Petr__
Profil *
Mufna
Já nejsem kdovíjaký odborník, takže se plést klidně můžu. Byl bych taky docela rád, kdyby tu někdo zkušenější napsal, že je to fakt dobře, protože mě to taky zajímá. Zkoušel jsem na tom jednoduché ukázky XSS útoků co jsem našel na různě webu a nic mi to nespustilo.

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: