gpt4 book ai didi

javascript - 利用 JavaScript 的 eval() 方法

转载 作者:可可西里 更新时间:2023-11-01 02:57:20 25 4
gpt4 key购买 nike

许多开发人员认为应该避免使用 JavaScript 的 eval() 方法。从设计的 Angular 来看,这个想法是有道理的。当有更简单、更好的选项可用时,它通常用作丑陋的解决方法。

但是,我不理解对安全漏洞的担忧。当然,运行 eval() 使黑客能够运行您可以运行的任何 JavaScript 代码。

但是他们不能这样做吗?至少在 Chrome 中,开发者工具允许最终用户运行他们自己的 JavaScript。 eval() 为什么比开发者工具更危险?

最佳答案

正如 B-Con 所提到的,攻击者不是坐在计算机前的那个人,因此可以使用脚本中已有的 eval() 作为将恶意代码传递到您的站点的手段以某种方式利用当前用户的 session (例如,用户访问恶意链接)。

eval() 的危险在于它在未经处理的值上执行时,可能导致 DOM Based XSS漏洞。

例如在您的 HTML 中考虑以下代码(相当人为的,但它演示了我希望的问题)

<script>

eval('alert("Your query string was ' + unescape(document.location.search) + '");');

</script>

现在,如果查询字符串是 ?foo,您只会收到一个警告对话框,说明以下内容:您的查询字符串是 ?foo

但是这段代码允许用户做的是将用户从他们的站点重定向到一个 URL,例如 http://www.example.com/page.htm?hello%22);alert(document. cookie+%22,其中 www.example.com 是您的网站。

这会将 eval() 执行的代码修改为

alert("Your query string was hello");
alert(document.cookie+"");

(为清楚起见,我添加了新行)。现在这可能比显示当前 cookie 值更恶意,因为所需的代码只是通过攻击者的链接以编码形式传递到查询字符串上。例如,它可能在资源请求中将 cookie 发送到攻击者的域,从而使身份验证 session 被劫持。

这适用于来自用户/外部输入的任何未经过滤并直接在 eval() 中执行的值,而不仅仅是此处显示的查询字符串。

关于javascript - 利用 JavaScript 的 eval() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18189496/

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