gpt4 book ai didi

javascript - 如何中和注入(inject)的远程 Ajax 内容?

转载 作者:行者123 更新时间:2023-11-29 18:37:44 28 4
gpt4 key购买 nike

我会将来自远程源的内容插入到网络应用程序中。来源应该是有限的/可信的,但仍然存在几个问题:

远程资源可以

1) 被黑客攻击并注入(inject)坏东西

2) 覆盖全局名称中的对象 空间

3) 我可能最终会打开它供用户输入他们自己的远程源。 (这取决于用户是否遇到麻烦,但我仍然可以降低风险。)

所以为了安全起见,我想中和任何/所有注入(inject)的内容。

这是我目前的计划:

1) 查找并删除所有内联事件处理程序

str.replace(/(<[^>]+\bon\w+\s*=\s*["']?)/gi,"$1return;"); // untested

例如

<a onclick="doSomethingBad()" ...

会变成

<a onclick="return;doSomethingBad()" ...

2) 删除所有出现的这些标签:脚本、嵌入、对象、表单、iframe 或小程序

3) 找到标签中所有出现的单词 script并用 html 实体替换单词脚本

str.replace(/(<[>+])(script)/gi,toHTMLEntitiesFunc);

会照顾

<a href="javascript: ..."

4) 最后,任何不以 http 开头的 src 或 href 属性都应该在其前面加上远程源的域名

我的问题:我还遗漏了什么吗?其他我绝对应该做或不应该做的事情?


编辑:我有一种感觉,回应将分为几个阵营。

1) “不要这样做!” 响应

好的,如果有人想要 100% 安全,他们需要断开计算机。

这是可用性和安全性之间的平衡。

没有什么可以阻止用户直接访问网站并被曝光。如果我打开它,用户将自行承担输入内容的风险。他们可以像在我的表单中一样轻松地将给定的 URL 输入他们的地址栏。因此,除非我的服务器存在特殊风险,否则我可以接受这些风险。

2) “我知道常见的漏洞,你需要考虑这个......” 回应......或者你可以通过这样做来防止另一种攻击......或者这次攻击......?

我正在寻找第二种类型,除非有人可以提供具体原因说明我的操作比用户自己可以做的更危险。

最佳答案

而不是 sanitizer (黑名单)。我建议您设置一个白名单,只允许那些非常具体的事情。

这样做的原因是您永远、永远、永远不会捕获恶意脚本的所有变体。它们太多了。

关于javascript - 如何中和注入(inject)的远程 Ajax 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1062254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com