Výpis html a zárověň ochrana

- iwory
- Člen | 147
Zdravím, lze nějak obejít výpis html {!$myVar} aby byla proměnná
zároven chráněna proti XSS?
Mám jeden vstupní formulář a potřeboval bych na výstupu vypisovat alespon
<br />
Když ale vypnu escapování, tak je o zranitelné.
Je nějaká možnost jak vypsat html s ochranou? Třeba jenom vyjmenovat které tagy se mají převést nebo tak?
Dík Z.

- Filip Procházka
- Moderator | 4668
Vyjmenovat tagy můžeš: strip_tags, zbytek se zahodi
Tohle nikdy nedělej! strip_tags nestačí.
Správně takto
{!$var|escape|nl2br}
Nebo v novém Nette
{$message->body|escape|nl2br|noescape}
Nejprve je potřeba vypnout automatické escapování (!, nebo
lépe |noescape), potom ručně escapovat |escape a
potom můžeš do výsledku doplnit zalomení řádků |nl2br.

- Oli
- Člen | 1215
Filip Procházka napsal(a):
Vyjmenovat tagy můžeš: strip_tags, zbytek se zahodi
Tohle nikdy nedělej! strip_tags nestačí.
Chapu, ze to odstrani tagy, ale neodstrani js scripty. Nebo tam je nejakej jinej zadrhel? Je vubec moznost jak bezpecne vypsat treba z databaze html obsah? Co kdyz budu napriklad chtit ne jen <br/>, ale i <a> a <p>?

- Filip Procházka
- Moderator | 4668
Tak použij Texy. Viděl jsem v něm někde nastavení, pomocí kterého můžeš whitelistovat tagy a atributy.

- Oli
- Člen | 1215
No já používám redactor. Nějakou ochranu tam prej taky má. V drtivý většině případů jsou formuláře pro administraci, takže tam nepředpokládám nějakýho „záškodníka“.
Kromě použití Texy existuje teda nějakej způsob jak toho dosáhnout? Koukal jsem se zběžně jak to řeší texy, ale nejsem moc schopnej rozeznat co je z toho klíčový pro bezpečnost. Třeba se tam celej text převádí do UTF8 upravý a pak zase zpátky, ale nepředpokládám, že to bude jediná důležitá věc… Dukladně jsem to nezkoumal. Je to tam celkem zadrátovaný a vytahovat se mě to moc nechce :-)
Ten strip_tag považuju za takový minimum, když vypnu escapování, ale pro mě to je momentálně i maximum…