Jar*_*sen 10 javascript security eval client-side code-injection
许多开发人员认为eval()应该避免使用JavaScript的方法.从设计角度来看,这个想法很有意义.当更简单,更好的选项可用时,它通常被用作丑陋的解决方法.
但是,我不了解安全漏洞的担忧.当然,运行eval()使黑客能够运行您可以运行的任何JavaScript代码.
但他们不能这样做吗?至少在Chrome中,开发人员工具允许最终用户运行自己的JavaScript.如何eval()比开发人员工具更危险?
Sil*_*Fox 13
正如B-Con所提到的那样,攻击者不是坐在计算机上的人,因此可以使用eval()脚本中的已经作为将恶意代码传递到您的站点的手段,以便在某种程度上利用当前用户的会话(例如,用户关注恶意链接).
危险eval()在于它是在未经过消毒的值上执行的,并且可能导致基于DOM的XSS漏洞.
例如,考虑HTML中的以下代码(相当人为,但它表明了我希望的问题)
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
Run Code Online (Sandbox Code Playgroud)
现在,如果查询字符串是?foo您只需获得一个警告对话框,说明以下内容:Your query string was ?foo
但是,此代码允许用户执行的操作是将用户从其站点重定向到URL,例如http://www.example.com/page.htm?hello%22);alert(document.cookie+%22www.example.com是您的网站.
这会修改由eval()to 执行的代码
alert("Your query string was hello");
alert(document.cookie+"");
Run Code Online (Sandbox Code Playgroud)
(为了清楚起见,我添加了新的线条).现在这可能比显示当前cookie值更恶意,因为所需代码只是由攻击者的编码形式的链接传递给查询字符串.例如,它可能在资源请求中将cookie发送到攻击者的域,从而使身份验证会话被劫持.
这适用于来自用户/外部输入的任何未经过消毒并直接在其中执行的值eval(),而不仅仅是此处所示的查询字符串.
小智 6
攻击者无权访问用户浏览器的开发人员工具。攻击者很可能不是坐在电脑前的用户。
危险eval()在于攻击者可能能够操纵最终eval()以其他方式运行的数据。如果eval()'d 字符串来自 HTTP 连接,攻击者可能会执行 MITM 攻击并修改字符串。如果字符串来自外部存储,攻击者可能已经操纵了该存储位置中的数据。等等。
| 归档时间: |
|
| 查看次数: |
18895 次 |
| 最近记录: |