【问题标题】:Is it safe to allow an anchor tag in an html editor?在 html 编辑器中允许锚标记是否安全?
【发布时间】:2019-02-01 02:22:36
【问题描述】:

我在我的应用程序的一个文本区域中允许使用 HTML,现在我将在客户端和服务器端验证中阻止某些 HTML 元素和属性。

我想知道允许锚点<a> 标记是否明智。我真的需要我的用户能够输入锚点。但是,我正在思考一个坏人对锚标签的所有误用。

这是我想出的。

  1. 可以使用它来执行外部脚本。例如

    http://external/website/js/function">虚拟文本

  2. 流氓可以简单地从源域中执行我自己的 JS 函数之一。

    Gotchya!

    虚拟文本

当然,我可以通过确保所有内容都得到适当的范围来缓解#2,但我只是担心尝试考虑可能发生的所有邪恶事情的好习惯,因此我可能会将它们合并到我的代码/设计中。

还有其他方法可以让某人滥用锚标记吗?

【问题讨论】:

  • 请记住,any 标签可以附加一个内联侦听器,例如<a href="somewhere" onclick="evilFn = function() { alert('evil') }; evilFn();">link</a>。这不仅是<a>s 的问题,而是任何元素
  • 是的,您的编辑器中可以有任何标签,但请确保清理您的输入并防止任何 xss 攻击。有一些为此的库
  • 就像 Pars 说的那样,有一些经过验证且值得信赖的库来处理这类事情 - 使用它们可能比尝试自己重新发明轮子更好(这可能会也可能不会导致安全结果)
  • @Pars 谢谢。我在看一些。在服务器端,我非常了解如何处理请求验证。在客户端,我正在考虑自己做,但我现在正在考虑使用 lib。你想推荐一些吗?
  • @user2864740 这与我的要求完全无关。你是在建议我应该写一种元语言吗?你到底在说什么?问题非常具体。除非我遗漏了什么,否则我认为您的评论是喷枪。

标签: javascript html security websecurity


【解决方案1】:

是的,在你的应用程序中允许一个标签是安全的。 为了具体回答您的问题,您已经涵盖了大部分内容,但是某个地方的某个人正在尝试新问题。

为了解决这个问题,使用最新的过滤库将缓解 xss 攻击link

一旦输入格式正确(转义不受信任的数据),通过 HTML 解析器运行它。这会删除不在现有白名单上的所有内容。

你不需要自己写,有很多已经存在link,还有其他的。

附:建议您在服务器端而不是客户端进行过滤。 link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多