为啥在清理中删除“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 以及如何避免该问题?
如何在 Web 应用程序中检测 tel: uri 方案的可用性?
为啥允许使用 kebab-case 非标准属性,而不允许使用其他属性?以及如何在 TypeScript 中定义这样的类型?