利用JavaScript';s eval()方法
许多开发人员认为,应该避免使用JavaScript的利用JavaScript';s eval()方法,javascript,security,eval,client-side,code-injection,Javascript,Security,Eval,Client Side,Code Injection,许多开发人员认为,应该避免使用JavaScript的eval()方法。从设计的角度来看,这个想法是有道理的。当一个更简单、更好的选项可用时,它通常被用作一个丑陋的解决方法 然而,我不理解人们对安全漏洞的担忧。当然,运行eval() 但是他们不能这样做吗?至少在Chrome中,开发者工具允许最终用户运行自己的JavaScript。eval()如何比开发人员工具更危险?攻击者无法访问用户浏览器的开发人员工具。攻击者可能不是坐在计算机旁的用户 eval()的危险在于,攻击者可能会以其他方式操纵最终通过
eval()
方法。从设计的角度来看,这个想法是有道理的。当一个更简单、更好的选项可用时,它通常被用作一个丑陋的解决方法
然而,我不理解人们对安全漏洞的担忧。当然,运行eval()
但是他们不能这样做吗?至少在Chrome中,开发者工具允许最终用户运行自己的JavaScript。eval()
如何比开发人员工具更危险?攻击者无法访问用户浏览器的开发人员工具。攻击者可能不是坐在计算机旁的用户
eval()
的危险在于,攻击者可能会以其他方式操纵最终通过eval()
运行的数据。如果eval()
'd字符串来自HTTP连接,攻击者可能会执行MITM攻击并修改该字符串。如果字符串来自外部存储,则攻击者可能操纵了该存储位置中的数据。等等。正如B-Con提到的,攻击者不是坐在计算机旁的人,因此可能会使用脚本中已有的eval()
将恶意代码传递到您的站点,以便以某种方式利用当前用户的会话(例如,用户跟踪恶意链接)
eval()
的危险在于对未初始化的值执行时,可能会导致漏洞
例如,在HTML中考虑下面的代码(比较巧妙,但它演示了我希望的问题)
(为了清晰起见,我添加了新行)。现在,这可能比显示当前cookie值更恶意,因为攻击者的链接以编码形式将所需代码简单地传递到查询字符串上。例如,它可能在资源请求中将cookie发送到攻击者的域,从而使身份验证会话被劫持
这适用于用户/外部输入中未初始化并直接在eval()
中执行的任何值,而不仅仅是此处显示的查询字符串。这不是“共识”。许多有经验的开发人员对FUD关于eval
的问题感到恼火。“eval是邪恶的”今天可能从未被有经验的程序员说过。如果你很愚蠢,那可能很危险。但通常情况下,这只是一个缓慢、丑陋的问题,导致代码难以进化。现在,我不知道这个问题如何得到一个好的答案……真正的问题是来自用户提供的任何源的字符串。考虑到eval
,MITM攻击始终是一个问题。如果他们在做MITM,他们可以同样轻松地修改常规的非evaled JS负载。另一个经典的例子是eval
ing GET variables是打开XSS漏洞的一种简单方法。等等。这是有道理的。我认为eval()
允许黑客入侵网站本身,而不是允许其他网站刮取用户数据。不是直接的,但如果管理员用户被锁定,这可以做到。
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
alert("Your query string was hello");
alert(document.cookie+"");