在 html 编辑器中允许锚标记是不是安全?
Posted
技术标签:
【中文标题】在 html 编辑器中允许锚标记是不是安全?【英文标题】:Is it safe to allow an anchor tag in an html editor?在 html 编辑器中允许锚标记是否安全? 【发布时间】:2019-02-01 02:22:36 【问题描述】:我在我的应用程序的一个文本区域中允许使用 html,现在我将在客户端和服务器端验证中阻止某些 HTML 元素和属性。
我想知道允许锚点<a>
标记是否明智。我真的需要我的用户能够输入锚点。但是,我正在思考一个坏人对锚标签的所有误用。
这是我想出的。
可以使用它来执行外部脚本。例如
http://external/website/js/function">虚拟文本
流氓可以简单地从源域中执行我自己的 JS 函数之一。
Gotchya!
虚拟文本
当然,我可以通过确保所有内容都得到适当的范围来缓解#2,但我只是担心尝试考虑可能发生的所有邪恶事情的好习惯,因此我可能会将它们合并到我的代码/设计中。
还有其他方法可以让某人滥用锚标记吗?
【问题讨论】:
请记住,any 标签可以附加一个内联侦听器,例如<a href="somewhere" onclick="evilFn = function() alert('evil') ; evilFn();">link</a>
。这不仅是<a>
s 的问题,而是任何元素
是的,您的编辑器中可以有任何标签,但请确保清理您的输入并防止任何 xss 攻击。有一些为此的库
就像 Pars 说的那样,有一些经过验证且值得信赖的库来处理这类事情 - 使用它们可能比尝试自己重新发明***更好(这可能会也可能不会导致安全结果)
@Pars 谢谢。我在看一些。在服务器端,我非常了解如何处理请求验证。在客户端,我正在考虑自己做,但我现在正在考虑使用 lib。你想推荐一些吗?
@user2864740 这与我的要求完全无关。你是在建议我应该写一种元语言吗?你到底在说什么?问题非常具体。除非我遗漏了什么,否则我认为您的评论是喷枪。
【参考方案1】:
是的,在你的应用程序中允许一个标签是安全的。 为了具体回答您的问题,您已经涵盖了大部分内容,但是某个地方的某个人正在尝试新问题。
为了解决这个问题,使用最新的过滤库将缓解 xss 攻击link
一旦输入格式正确(转义不受信任的数据),通过 HTML 解析器运行它。这会删除不在现有白名单上的所有内容。
你不需要自己写,有很多已经存在link,还有其他的。
附:建议您在服务器端而不是客户端进行过滤。 link
【讨论】:
以上是关于在 html 编辑器中允许锚标记是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Rider for Mac 版本中允许“不安全代码”?