Autor Zpráva
Enko
Profil *
Ahoj, prosím o radu.
Píšu minidiskuzi a narazil jsem na následující. Z bezpečnostních důvodů potřebuji odstranit všechny html tagy s výjimkou <br>. Toto se dělá funkcí strip_tags(), to je jasné. Nicméně se doporučuje ještě výstupy do stránky prohánět přes funkci htmlspecialchars(), protože funkce strip_tags() není stoprocentní. Nicméně ale jak udělat, aby se mi v tom výstupu nepřeváděli tagy <br> nebo <br /> na entity?

Moc díky
DarkMeni
Profil
Buď převádět \n jako <br>, nebo vytvořit bb kódy aby si mohli oddělovat řádky třeba přes [br], nebo před použitím htmlspecialchars změnit <br> třeba na [br] a to pak zase zpátky na <br> což by byla asi nejdelší metoda (nebo bez zálohy rovnou po htmlspecialchars převádět "&lt;br&gt;" na "<br>" třeba přes preg_replace nebo jinou převáděcí funkci - myslim že str_replace je snad ještě rychlejší, protože nerozebírá regulerní výraz).
Enko
Profil *
DarkMeni:
Str_replace funguje bezvadně. Děkuju :)
Str4wberry
Profil
Jaký je důvod v minidiskuzi pro povolení značky <br>?

protože funkce strip_tags() není stoprocentní
Proč se domníváte, že strip_tags není stoprocentní?
Keeehi
Profil
Já bych použil nl2br. Samozřejmě je to potřeba udělat až na úplný konec.
Enko
Profil *
Str4wberry:
Proč se domníváte, že strip_tags není stoprocentní?
www.tjsd.cz/bezpecnost-php-aplikaci/ více viz zde

aký je důvod v minidiskuzi pro povolení značky <br>?
Protože to tak mám v zadání :)
panther
Profil
Enko:
www.tjsd.cz/bezpecnost-php-aplikaci/ více viz zde
tam se píše, že projde dovolený tag i s JS, je-li k němu JS přiložen. Pokud chceš povolit jen BR, tento problém se ho netýká.
Str4wberry
Profil
Já ten dotaz oproti stoprocentnosti mířil tedy spíš na strip_tags bez povolených značek (bez ohledu na kontext dotazu). Tam je důvod k nepoužívání spíš v nežádoucím požírání HTML značek než bezpečnostní*.

Do <br> by možná něco škodlivého vložit jít nemělo, ale ruku do ohně bych za to nedal. Napadá mě třeba připojení škodlivého JS pomocí behavior.

V zadání skutečně je, že má být možno do textu ručně vkládat jen a pouze HTML značku <br>?

*) Ano, pokud se touto funkcí upravený text bude vypisovat na místě atributu, je možné vložit funkční kód. Plus může vzniknout nevalidní výstup.
panther
Profil
Str4wberry:
Tam je důvod k nepoužívání spíš v nežádoucím požírání HTML značek než bezpečnostní
v pridavani prispevku zadne HTML byt nema (az na vyjimky, treba zde na diskusi BB cody a podobne), takze veskere pozirani je zadouci. Nema vzniknout jak nevalidni nebo jinak zavadny vystup, protoze z hlediska DOMu bude struktura stejna, jako by byl prispevek prazdny.
Str4wberry
Profil
Požírání žádoucí není. Funkce strip_tags nevhodně požere třeba i „a<b“, nepůjde zapsat cokoliv vypadající jako HTML. Nevalidní výstup vytvoří třeba nezaentitované „<“ nebo „&“.
Enko
Profil *
Děkuji za zajímavou diskuzi. Vzal jsem si z ní pár zajímavých postřehů :)

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: