对于 Ruby 应用程序,有没有比 Sanitize 更好的替代方案?
Posted
技术标签:
【中文标题】对于 Ruby 应用程序,有没有比 Sanitize 更好的替代方案?【英文标题】:Are there any better alternatives to Sanitize for a Ruby app? 【发布时间】:2013-12-18 21:56:59 【问题描述】:我爱Sanitize。这是一个了不起的实用程序。我唯一遇到的问题是,它需要永远准备一个开发环境,因为它使用Nokogiri
,这对编译时间来说是一个痛苦。是否有任何程序可以使用 Nokogiri
执行 Sanitize 的功能(如果只是温和的功能)?这将成倍增加!
【问题讨论】:
为什么不以不同的方式准备 Nokogiri? 因为 Nokogiri 包装了 libxml2,它是 XML 的引用实现,除了你知道... 取消投票,因为这是一个真正的问题,有可能得到很好的答案。蹩脚的答案是使用 REXML 及其 XPath 重写 Sanitize 的核心。可以遍历 html,将每个标签名称与白名单进行比较,并杀死不在白名单上的每个标签。这会很慢;如果这成为问题,则安装 VirtualBox,在其上安装 Ubuntu Saucy Salamander,在其上安装 RVM,然后让 Nokogiri 咆哮。 如果我理解正确,您有一个命令行 ruby 脚本来执行清理工作。如果是这样,为什么不将其包装在一个简单的 Sinatra 等服务中并发布您的请求? 如果这是一个严重的痛点,您可以尝试准备一个Vagrant box,其中所有内容都已经为您编译好了。 【参考方案1】:Rails 有自己的SanitizeHelper
。
根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,会
此清理助手将对所有标签进行 html 编码并去除所有未明确允许的属性。
它还会去除带有无效协议的 href/src 标签,例如 javascript: 尤其如此。它尽最大努力对抗黑客可能使用的任何技巧,例如输入 unicode/ascii/hex 值以通过 javascript: 过滤器。查看广泛的测试套件。
你可以在这样的视图中使用它
<%= sanitize @article.body %>
您可以访问该链接以查看更多自定义选项,例如:
自定义使用(只允许提到的标签和属性,没有别的)
<%= sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style) %>
【讨论】:
你能提供一个链接到这个在普通类实例中的一些示例用法吗?我目前对您所说的解释是,使用 SanitizeHelper 的代码行看起来像“SanitizeHelper::sanitize(html, options)”,而不是普通的 Sanitize(在 require 语句之后):“Sanitize.clean(html , 选项)”。 @T145 如果在类实例中使用,您的意思是在控制器中使用 sanitize,那么您可以看到这个问题 - ***.com/questions/3985989/… 非常感谢,这非常有帮助!我继续用ActionController::Base.helpers.sanitize
替换了我所有的Sanitize.clean
方法,现在一切正常!
作为一个快速跟进,如果我不是从控制器调用(例如从 lib 组件),我会使用什么?从控制器外部使用该方法会引发异常。
@TI45 您可以包含 Helper,它应该可以工作 - include ActionView::Helpers::SanitizeHelper
以上是关于对于 Ruby 应用程序,有没有比 Sanitize 更好的替代方案?的主要内容,如果未能解决你的问题,请参考以下文章
公司实习让我学习RUBY语言,不知道RUBY语言发展前景怎么样,值不值的去学习。