Autor | Zpráva | ||
---|---|---|---|
Enko Profil * |
#1 · Zasláno: 13. 9. 2012, 17:30:18
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 |
#2 · Zasláno: 13. 9. 2012, 17:44:01
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 "<br>" 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 * |
#3 · Zasláno: 13. 9. 2012, 17:52:08
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 |
#5 · Zasláno: 13. 9. 2012, 18:59:41
Já bych použil nl2br. Samozřejmě je to potřeba udělat až na úplný konec.
|
||
Enko Profil * |
#6 · Zasláno: 13. 9. 2012, 21:14:47
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 |
#7 · Zasláno: 13. 9. 2012, 21:29:28
Enko:
„w>ww.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 |
#8 · Zasláno: 13. 9. 2012, 22:21:42
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 |
#9 · Zasláno: 14. 9. 2012, 08:30:11
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 |
#10 · Zasláno: 14. 9. 2012, 10:49:49
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 * |
#11 · Zasláno: 14. 9. 2012, 15:18:40
Děkuji za zajímavou diskuzi. Vzal jsem si z ní pár zajímavých postřehů :)
|
||
Časová prodleva: 12 let
|
0