利用JavaScript's eval()方法
Exploiting JavaScript's eval() method
许多开发人员认为应该避免使用JavaScript的eval()
方法。从设计的角度来看,这个想法是有道理的。当有更简单、更好的选择时,它通常被用作一种丑陋的变通方法。
然而,我不理解人们对安全漏洞的担忧。当然,运行eval()
使黑客能够运行任何可以运行的JavaScript代码。
但他们就不能这样做吗?至少在Chrome中,开发者工具允许最终用户运行自己的JavaScript。eval()
如何比开发人员工具更危险?
正如B-Con所提到的,攻击者不是坐在计算机旁的人,因此可能会使用脚本中已有的eval()
将恶意代码传递到您的网站,以某种方式利用当前用户的会话(例如,用户跟踪恶意链接)。
eval()
的危险在于它在未初始化的值上执行,并可能导致基于DOM的XSS漏洞。
例如,考虑HTML中的以下代码(相当做作,但它展示了我希望的问题)
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
现在,如果查询字符串是?foo
,您只需得到一个警报对话框,其中说明以下内容:Your query string was ?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发送到攻击者的域,从而使身份验证会话被劫持。
这适用于用户/外部输入中未初始化并直接在eval()
中执行的任何值,而不仅仅是此处显示的查询字符串。
攻击者无法访问用户浏览器的开发工具。攻击者很可能不是坐在电脑旁的用户。
eval()
的危险在于,攻击者可能能够以其他方式操纵最终通过eval()
运行的数据。如果eval()
'd字符串来自HTTP连接,则攻击者可能会执行MITM攻击并修改该字符串。如果字符串来自外部存储,则攻击者可能已经操纵了该存储位置的数据。等等
- 递归使用 eval() 是检查程序执行的好方法吗?
- javascript eval方法语法
- 使用 eval 从字符串创建函数的不同方法
- 使用 eval() 的替代方法
- 如何将包含在 eval 方法中的两个文件作为线程运行
- 如何在不使用 eval 的情况下使不存在的(非成员,非全局)方法可调用
- 有没有一种方法可以在JavaScript中执行类似于window.eval()的jQuery
- 在返回作为字符串参数传递的值时使用eval()的正确方法
- 我们可以在 JavaScript 中使用 eval 方法创建 HTML 标签吗?
- 利用JavaScript's eval()方法
- 是否有任何非eval方法可以创建具有运行时确定名称的函数
- 有没有一种方法可以在不进行eval的情况下输入Highchart系列数据
- 在不使用eval的情况下在方法函数中传递固定参数
- 对象的Eval方法
- Javascript,可以在没有 eval 的情况下传递未声明的方法参数
- 使用eval将变量分配给方法.否则我该怎么做
- 替换 eval() 方法
- JavaScript,在不使用eval(Revearing模式)的情况下,将私有函数作为公共方法内的字符串调用
- Javascript:有没有一种方法可以使用字符串作为回调,而不需要eval()
- javascript中的eval方法