如何安全地将可能格式错误的HTML插入JSF页面?

时间:2014-05-06 14:44:11

标签: jsf

我正在开发一个需要更新公司隐私政策的JSF页面。我没有复制并粘贴新文本,而是希望将PrimeFaces对话框显示为链接到其他地方的隐私政策。所以,我这样做:

    <p:dialog id="dlgPrivacyPolicy">
        <ui:include src="https://cdn.mycompany.com/privacy/en-us/privacy.htm"/>
    </p:dialog>

问题是,该页面上的HTML略有格式错误;有一个<meta>标签没有关闭。这导致我的JSF页面无法编译。

我可以找到维护该页面的人并要求他们更正,但这是一个创可贴。如果该页面上出现任何格式错误的HTML,它将会崩溃。由于隐私政策没有关闭标签,因此无法加载我的页面。

我是否可以安全地将可能格式错误的HTML插入我的网页?或者我是否坚持复制和粘贴,如果我真的想避免这个问题?

3 个答案:

答案 0 :(得分:3)

如果您不想要xhtml编译问题,则不应在服务器端但在客户端包含格式错误的页面,例如在其上运行ajax请求并使用dlgPrivacyPolicy div的innerHtml属性包含它。 使用JQuery:

$.ajax({
    url: "https://cdn.mycompany.com/privacy/en-us/privacy.htm"
})
.done(function( html ) {
    $( "#dlgPrivacyPolicy " ).html( html );
});

答案 1 :(得分:1)

考虑到您的要求(在您的问题和评论中提到),我建议您使用jsoup:您可以获取html内容服务器端,清理它,然后使用页面上的已清理内容。消毒步骤完全取决于您(以及jsoup的强大功能),其中包括根据需要删除页面中未使用/不安全的部分(即标题,css等)。

答案 2 :(得分:0)

我担心逐字地包含一个完整的HTML页面总是很痛苦。存在格式错误的HTML的风险,或者页面可能会做一些有趣的事情,例如覆盖CSS样式,污染全局Javscript范围等等。

我认为唯一干净,可维护的解决方案是就某种(网络)服务达成一致,该服务以适合包含在其他地方的明确定义的格式(HTML,XHTML等)提供隐私政策。这也确保隐私政策的提供者不会突然决定更改URL,或包括弹出窗口或类似内容。重要的是,该服务是具有商定规则的官方服务。


如果您无法获得该服务,则必须找到解决方法。我能想到的最好的方法是通过一些容忍的HTML解析器过滤策略来修复它(在运行时,或作为构建的一部分)。然后,您还可以修复过度热衷的CSS规则或错误的Javascript等内容。