【问题标题】:Why are "tel:" links removed in sanitization, and how to allow them为什么在清理中删除“tel:”链接,以及如何允许它们
【发布时间】:2016-06-10 19:12:57
【问题描述】:

我正在使用 Rails sanitize helper 清理来自用户的输入文本,这些文本可能被格式化为 markdown。

我注意到该方法删除了tel: 链接,我想知道为什么,以及如何允许它们。

>> sanitize("<a href='http://123'>click</a>")
=> "<a href=\"http://123\">click</a>"
>> sanitize("<a href='tel:123'>click</a>")
=> "<a>click</a>"

当然,我已经尝试从上面链接的页面中找出它,但无法解决。我宁愿避免为该简单任务编写“洗涤器”类或任何其他类。

我也尝试过我认为“允许所有href”的意思,但它没有任何效果(即使在重新启动服务器之后)。

# In config/application.rb
config.action_view.sanitized_allowed_attributes = ['href']

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    在 Rails 4 中,Loofah 被用于清理 HTML。了解更多请访问this链接。

    Rails 团队将此功能提取到单独的gem

    如果您检查this 行,Loofah::HTML5::WhiteList::ALLOWED_PROTOCOLS 在其列表中没有tel,因此它被从锚标记中剥离。

    解决方案:

    1. 创建一个初始化器,将tel 添加到上述协议集。

      丝瓜络::HTML5::WhiteList::ALLOWED_PROTOCOLS.add('tel')

    2. 重新启动应用程序,这应该可以工作。

    【讨论】:

    • 我希望得到这样一个简单而伟大的答案,非常感谢。马上就去试试。我认为默认情况下应该允许“tel:”链接是错误的吗?我的意思是那有什么害处?
    • @DannyB 是的 tel: 我猜默认情况下应该允许链接。可能你可以在rails-html-sanitizer gem 中打开这个问题并询问他们为什么tel: 默认不在列表中。 :)
    • 打开issue #52 - 希望他们会实施。
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 2021-05-26
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多