【发布时间】:2019-02-01 02:22:36
【问题描述】:
我在我的应用程序的一个文本区域中允许使用 HTML,现在我将在客户端和服务器端验证中阻止某些 HTML 元素和属性。
我想知道允许锚点<a> 标记是否明智。我真的需要我的用户能够输入锚点。但是,我正在思考一个坏人对锚标签的所有误用。
这是我想出的。
-
可以使用它来执行外部脚本。例如
-
流氓可以简单地从源域中执行我自己的 JS 函数之一。
当然,我可以通过确保所有内容都得到适当的范围来缓解#2,但我只是担心尝试考虑可能发生的所有邪恶事情的好习惯,因此我可能会将它们合并到我的代码/设计中。
还有其他方法可以让某人滥用锚标记吗?
【问题讨论】:
-
请记住,any 标签可以附加一个内联侦听器,例如
<a href="somewhere" onclick="evilFn = function() { alert('evil') }; evilFn();">link</a>。这不仅是<a>s 的问题,而是任何元素 -
是的,您的编辑器中可以有任何标签,但请确保清理您的输入并防止任何 xss 攻击。有一些为此的库
-
就像 Pars 说的那样,有一些经过验证且值得信赖的库来处理这类事情 - 使用它们可能比尝试自己重新发明轮子更好(这可能会也可能不会导致安全结果)
-
@Pars 谢谢。我在看一些。在服务器端,我非常了解如何处理请求验证。在客户端,我正在考虑自己做,但我现在正在考虑使用 lib。你想推荐一些吗?
-
@user2864740 这与我的要求完全无关。你是在建议我应该写一种元语言吗?你到底在说什么?问题非常具体。除非我遗漏了什么,否则我认为您的评论是喷枪。
标签: javascript html security websecurity