首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何纺织和消毒html?

我如何纺织和消毒html?
EN

Stack Overflow用户
提问于 2009-02-01 22:30:22
回答 2查看 3.6K关注 0票数 5

现在我遇到了一些愚蠢的情况。我希望用户能够使用纺织品,但他们不应该在他们的条目周围乱搞我的有效HTML。所以我不得不以某种方式转义HTML。

  • html_escape(textilize("</body>Foo"))会使纺织品断裂
  • textilize(html_escape("</body>Foo"))可以工作,但是打破了各种纺织特性,比如链接(像"Linkname":http://www.wheretogo.com/一样编写),因为引号将被转换成&quot;,因此不再被纺织检测。
  • sanitize没有做得更好。

对那件有什么建议吗?我不想用蒂迪来解决这个问题。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-09-09 14:43:56

这对我很管用,也能防止每次我尝试过的XSS攻击,包括鼠标攻击.pre和代码块中的处理程序:

代码语言:javascript
复制
<%= RedCloth.new( sanitize( @comment.body ), [:filter_html, :filter_styles, :filter_classes, :filter_ids] ).to_html -%>

最初的消毒消除了许多潜在的XSS利用,包括鼠标。

据我所知,除了代码和pre之外,:filter_html可以转义大多数html标记。其他过滤器存在,因为我不希望用户应用任何类、ids和样式。

我刚刚用你的例子测试了我的评论页面

代码语言:javascript
复制
"</body>Foo" 

它完全去掉了流氓的身体标签

我使用红布版本4.2.3和Rails版本2.3.5

票数 2
EN

Stack Overflow用户

发布于 2009-02-01 23:33:16

看来纺织品根本不支持你想要的东西。

您确实希望只允许一个谨慎控制的HTML子集,但是纺织设计允许任意的HTML。我认为在这种情况下你根本不能使用纺织品(除非它支持这种限制)。

您需要的可能是一个特殊的“受限”版本的纺织品,它只允许“安全”标记(然而,定义它可能已经很棘手)。不过,我不知道是否存在这种情况。

您可能会看到BBCode,它允许限制可能的标记。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/501737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档