为啥在清理中删除“tel:”链接,以及如何允许它们

Posted

技术标签:

【中文标题】为啥在清理中删除“tel:”链接,以及如何允许它们【英文标题】: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']

【问题讨论】:

【参考方案1】:

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

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

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

解决方案:

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

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

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

【讨论】:

我希望得到这样一个简单而伟大的答案,非常感谢。马上就去试试。我认为默认情况下应该允许“tel:”链接是错误的吗?我的意思是那有什么害处? @DannyB 是的 tel: 我猜默认情况下应该允许链接。可能你可以在rails-html-sanitizer gem 中打开这个问题并询问他们为什么tel: 默认不在列表中。 :) 打开issue #52 - 希望他们会实施。

以上是关于为啥在清理中删除“tel:”链接,以及如何允许它们的主要内容,如果未能解决你的问题,请参考以下文章

为啥清理 useEffect 挂钩将 RTKQ 的结果视为 isLoading 以及如何避免该问题?

tel 的 WKWebView 问题:链接

如何在 Web 应用程序中检测 tel: uri 方案的可用性?

从单链接列表中删除节点 - 使用MALLOC / FREE

为啥允许使用 kebab-case 非标准属性,而不允许使用其他属性?以及如何在 TypeScript 中定义这样的类型?

如何从 intl-tel-input 中删除重复的国家/地区