在 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 编辑器中允许锚标记是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

在jetbrains骑手中允许不安全的代码?

Eclipse Neon Json 编辑器 - 允许评论

如何在 Rider for Mac 版本中允许“不安全代码”?

CSS 选择器中允许的注释语法

块编辑器中允许内部块的部分块,WordPress 5.0.2

如何Angularjs1.3在页面中输出带Html标记的文本