允许在htmlpurifier中使用twig语法和/或不要整理

时间:2016-07-15 10:57:15

标签: twig htmlpurifier

我正在运行一些我的访问者使用twig通过htmlpurifier创建的模板,但它一直在尝试修复html代码。

我以此为例:

<ul>
   {% for update in jobupdates %}
       <li>
          {{ update.comment|nl2br }}
       </li>
   {% endfor %}
</ul>

它将把它变成:

<ul><li>
{% for update in jobupdates %}
</li><li>
    {{ update.comment|nl2br }}
{% endfor %}
</li></ul>

完全打破了这一切。 我试过设置选项&#39; HTML.TidyLevel&#39;没有,但它仍然这样做。

有没有办法阻止htmlpurifier尝试修复HTML代码?或忽略twig语法?

1 个答案:

答案 0 :(得分:2)

背景

HTML Purifier是否适合您想要的工作?

你的问题基本上归结为HTML Purifier旨在消毒HTML,而你正在提供它,一种模板标记语言Twig。它包含一些HTML,但这与 HTML不同(就像HTML可以包含纯文本,但不是一回事作为明文)。

为什么会这样?

它正在做你正在观察的事情的原因是,HTML净化器在消毒部门中的大部分优势来自于严格控制HTML的结构。这样,依赖于超出标准的浏览器中的实现细节的漏洞(例如在这种情况下如何处理无序列表中的文本<ul>),而不是列表项<li>))也得到了处理,减少了攻击面。

在这种特殊情况下,通过允许这个星座来破坏任何东西的可能性很小,可以忽略不计,但人们可以想象其他重要的星座(例如想象有人写<img>some payload here</img> - HTML中的感觉,我知道现在没有任何漏洞,看起来像这样,但可以想象一个浏览器试图变得聪明起来。)

无论哪种方式,它都是HTML Purifier的一个组成部分,您不能简单地将其关闭,因为所有的卫生规则HTML Purifier基本上都存在 on 的格式良好的HTML,因为上述原因。

解决方案

答:质疑用例

根据倒数第二个用于卫生的用例,解决方案可能很简单,只需在之后将模板转换为HTML,但之前 em>结果显示在页面上。这具有净化例如净化的附加益处。注入模板的注释。

那就是说,这可能与你实际希望实现的目标无关。

B:使用其他工具

如果您想要做的只是整理模板中的HTML而不是清理它,您可能需要查看其他工具。我没有使用只是整理HTML的工具的经验,他们可能有相同的缺点(即使只是想产生有效的HTML会产生这种效果 - 但也许有一些工具只能缩进标记并修复明显的标记错误,例如删除某处的迷路</img>

如果您想清理 HTML,您也可以尝试使用其他工具。看看http://htmlpurifier.org/comparison的一些想法?

C:更改HTML Purifier的HTML定义

您可以分叉HTML Purifier并更改其对HTML的理解。如果您帖子中的示例没有很多堂兄弟,那么这实际上是可行的,即如果没有很多完全不同的星座,那么对格式良好的HTML的坚持就会受到阻碍。在您提到的示例中,这可能需要深入研究HTMLPurifier_HTMLModule_ListHTMLPurifier_ChildDef_List的内容,特别是后一类else中的validateChildren() - 块,但我有现在没有概念证明。

请记住,您在此处所做的事实上是将HTML Purifier工作的HTML定义转换为基本的Twig定义。这不仅可能有很多工作(取决于你想教多少),它可能实际上并不是你想要做的。

结论

我建议问自己几个问题并根据答案采取行动(括号中的信息作为这些行动的指南存在,其中的想法详尽无遗):

  1. 您是否必须拥有干净的模板或干净的输出? (如果模板,HTML Purifier无法帮助您,因为它不适用于Twig;如果是输出,HTML Purifier可以帮到你。)
  2. 您想阻止XSS攻击吗? (如果您这样做,HTML Purifier可以帮助您,但只有在Twig完成了它并构建了HTML才能进行分析之后。)< / em>的
  3. 您想要捕获无效的HTML声明吗? (如果您这样做,HTML Purifier可以再次帮助您,但也只有在Twig做完之后。) < / LI>
  4. 您想捕获无效的Twig声明吗? (如果您这样做,HTML Purifier无法帮助您 - 查找特定于Twig的验证工具可能会有意义。)
  5. 您可以自问其他问题,但我希望这些问题提供了一个有用的起点。