antisamy 解析器强制关闭标签

Posted

技术标签:

【中文标题】antisamy 解析器强制关闭标签【英文标题】:antisamy parser force closing tag 【发布时间】:2013-10-21 00:04:46 【问题描述】:

我使用 Antisamy 来验证 html。我的政策允许 iframe,例如 youtube 视频。问题是 - 如果标签是空的(像这样):

<iframe src="//www.youtube.com/embed/uswzriFIf_k?feature=player_detailpage" allowfullscreen></iframe>

清洗后会是这样的:

<iframe src="//www.youtube.com/embed/uswzriFIf_k?feature=player_detailpage" allowfullscreen/>

但它应该有正常的结束标记。

这会破坏页面上的所有内容。 我已经将指令设置为使用大部分 HTML 但不使用 XML:

<directives>
    <directive name="omitXmlDeclaration" value="true"/>
    <directive name="omitDoctypeDeclaration" value="true"/>
    <directive name="maxInputSize" value="200000"/>
    <directive name="nofollowAnchors" value="true" />
    <directive name="validateParamAsEmbed" value="true" />
    <directive name="useXHTML" value="false"/>

    <directive name="embedStyleSheets" value="false"/> 
    <directive name="connectionTimeout" value="5000"/>
    <directive name="maxStyleSheetImports" value="3"/>
    <directive name="formatOutput" value="false"/>
</directives>

但这无济于事。

UPD:在解析器之间切换和使用指令仍然没有给出任何结果。

UPD2:这是我配置的一部分,负责处理iframe标签:

    <tag name="iframe" action="validate">
        <attribute name="src">
            <regexp-list>
                <regexp name="youtube"/>
                <regexp name="slideshare"/>
            </regexp-list>
        </attribute>
        <attribute name="allowfullscreen">
             <regexp-list>
                 <regexp name="anything"/>
             </regexp-list>
        </attribute>
        <attribute name="scrolling">
            <regexp-list>
                <regexp name="anything"/>
            </regexp-list>
        </attribute>
        <attribute name="marginwidth">
            <regexp-list>
                <regexp name="anything"/>
            </regexp-list>
        </attribute>
        <attribute name="marginheight">
            <regexp-list>
                <regexp name="anything"/>
            </regexp-list>
        </attribute>
        <attribute name="frameborder">
            <regexp-list>
                <regexp name="anything"/>
            </regexp-list>
        </attribute>
        <attribute name="style"/>
    </tag>

有什么想法吗?

【问题讨论】:

我知道 4 年过去了....但是,你能记得你是否设法解决了这个问题吗?这两天一直在抓稻草 【参考方案1】:

试试这个 -

<tag name="iframe" action="validate"/>

并在这个列表中添加一个标签 -

<allowed-empty-tags>
   <literal-list>
      <literal value="iframe"/>
   </literal-list>
</allowed-empty-tags>

见http://code.google.com/p/owaspantisamy/...

【讨论】:

这已经完成了。我更新了我的问题。谢谢。问题是 - 它验证并正确处理。但是如果标签的主体是空的 - 它被替换为自封闭标签。但是如果是自封闭的,某些标签(iframe,form,...)在浏览器中不起作用。 相同。我已经有了这个。这是允许自封闭标签的响应,但对标签转换没有影响。 甚至更多 - 我已经有自己的AntiSamySAXScanner 类型并使用键:nekohtml.sourceforge.net/settings.html,但仍然没有结果。 我遇到了同样的问题。你是怎么解决的?【参考方案2】:

我遇到了同样的问题。就我而言,这是由于 AntiSamy 政策具有此指令:

<directive name="useXHTML" value="true" /> 

根据 OWASP 文档,它将以 XHTML 格式输出经过清理的数据,而不仅仅是常规 HTML。 请参见: https://www.owasp.org/index.php/AntiSamy_Directives

将该值更改为 false 将允许将经过净化的输出作为有效的 HTML 提供。块级元素不会被缩短并成为无效标记。

【讨论】:

以上是关于antisamy 解析器强制关闭标签的主要内容,如果未能解决你的问题,请参考以下文章

使用 SAX 解析器解析自关闭 XML 标记时遇到问题

用于 Java 的 HTML/XML 解析器 [关闭]

吉他和弦自定义标签简单解析器

如果输入文件中未指定 DTD,如何强制 SAX 解析器使用 DTD?

GraphQL 解析器可以强制检索父级中的参数吗?

Android:解析 XML 数据的最佳解析器 [关闭]