javascript eval()和安全性

时间:2016-08-20 20:33:54

标签: javascript security eval

developer.mozilla.org说:

  

不要不必要地使用eval! eval()是一个危险的函数,它   执行它以调用者的权限传递的代码。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

任何恶意用户都可以打开chrome调试器,并修改正在执行的javascript代码。所以他可以把自己的功能等等来执行。

一般有“安全javascript代码”这样的东西吗?

2 个答案:

答案 0 :(得分:4)

  

任何恶意用户都可以打开chrome调试器,并进行修改   正在执行的javascript代码。所以他可以把自己   要执行的功能等。

是的,用户可以"攻击"使用开发人员工具使用JavaScript进行自己的客户端会话。

然而,eval和开发人员工具之间的区别在于eval可以在可共享链接中执行。攻击者可以向受害者发送链接,该链接利用代码评估功能。

拿这段代码:

Toast.makeText(YourActivity.this,"your integer is " + intdelay , Toast.LENGTH_LONG).show();

现在,如果查询字符串为<script> eval('alert("Your query string was ' + unescape(document.location.search) + '");'); </script> ,您只需显示一个警告对话框,说明以下内容:?foo

现在说Chuck向鲍勃发送了一封电子邮件,主题是#34;看看这个很棒的链接!&#34;。

链接构造如下:

Your query string was ?foo,其中www.example.com是您的网站。

这会将http://www.example.com/page.htm?hello%22);alert(document.cookie+%22执行的代码修改为

eval()

(为了清楚起见,我添加了新的线条)。这将显示一个显示所有非httpOnly cookie的警告框。

将其带到下一阶段,攻击者可以构建一个图像链接以将会话cookie发送给自己

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

这称为Cross-Site Scripting (XSS)攻击。实际上,该类型是基于DOM的XSS,具体而言。

  

是否有&#34;安全的javascript代码&#34;总的来说?

是的,可以考虑对XSS安全的代码&#34;安全的JavaScript代码&#34; - 它保护当前用户免受跨域攻击。但是,服务器端代码“信任”&#34;目前的最终用户使用开发人员工具无法根据自己的优势修改JavaScript代码或变量,但这并不安全。

因此,安全的JavaScript代码就是保护当前用户的代码。

答案 1 :(得分:0)

是的,当然有安全的JavaScript。您可以随时修改浏览器中的JavaScript,例如您可以修改的方式。在你的机器上运行的python程序。

能够改变自己机器上的代码的工作方式是微不足道的,并不是一个安全问题。

Eval()经常被看作是有问题的,因为它往往是用用户生成的输入执行的(我认为真实的用例并不是真的很少)。 @SilverlightFox在他出色的答案中解释了为什么这可能是一个问题。这一切都归结为eval()可能被利用来在别人的机器上运行你的代码,这是一个安全问题。

请注意,这并非仅针对JavaScript,大多数语言具有相同的命名功能。这些功能带有类似的警告。