Jak bezpečně zobrazit nedůvěryhodné HTML zvenčí?

DefenestrationPraha
Člen | 99
+
0
-

Dobré listopadové odpoledne přeju,

a obracím se na vás všechny s následujícím problémem.

Moje aplikace dostala nějaké HTML, dejme tomu soubor ve formátu text/html v nějakém větším balíčku dat. Jeden z prezentérů, které mám, je prezentér zobrazující náhled souboru. U jiných formátů, jako je JSON nebo TXT, prostě strčím hrubá data do tagu <pre> a nemá se co zkazit.

Ale jak s tím HTML? Rád bych jej také hezky zobrazil (aspoň obsah elementu <body>), ale zároveň z něj chci vyfiltrovat všechny vulnerability či zákeřné věci jako XSS.

Patrně bych měl nějakým způsobem použít balíček Nette\Utils\Html, rozparsovat si zdrojový soubor a do šablony pak strčit vzniklý element. Ale není mi jasné, jak na to.

mystik
Člen | 291
+
+3
-

To je pomerne slozity problem protoze musis urcit co tomu obsahu dovolis a co uz ne. Ale pro zacatek bych vyzkousel iframe v sandbox modu, ktery blokuje v podstate vse uz na urovni browseru.

dakur
Člen | 493
+
0
-

Nette\Utils\Html je jen základní reprezentace HTML tagu a usnadňuje vytváření HTML kódu v PHP. K tomu svým API usnadňuje odlišení toho, co má a nemá být escapováno. Potud je to skvělé, ale není to parser.

Jestli potřebuješ ten soubor vypsat, tj. vidět, co ten kód vykoná po zobrazení v prohlížeči, použij např. ezyang/htmlpurifier či nějakou obdobu. Ten skutečně kód naparsuje a pak nad ním dělá úpravy.