1

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

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

这就是我想出的。

  1. 可以使用它执行外部脚本。对于.eg

    <a href = " http://external/website/js/function ">虚拟文本</a>

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

    <a href = "javascript::postMethodByMistakeDeclaredInGlobalScope();">Gotchya!</a>

    <a href = "#" onclick = "myobj.myfunction()">虚拟文本</a>

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

还有其他方法可以有人滥用锚标签吗?

4

1 回答 1

1

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

为了解决这个问题,使用最新的过滤库将减轻 xss 攻击链接

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

你不需要自己写,有很多已经存在的链接,其他的都是可用的。

PS建议您在服务器端而不是客户端进行过滤。 关联

于 2018-08-26T10:06:57.207 回答