Výpis html a zárověň ochrana

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
iwory
Člen | 147
+
0
-

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.

Oli
Člen | 1215
+
0
-

Vyjmenovat tagy můžeš: strip_tags, zbytek se zahodi

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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…