如果您评估用户生成的代码,我总是会听到并阅读“ Eval是邪恶的”。
但是与在Web控制台中输入代码有何不同?还有什么选择?
我知道网络上充斥着像我这样的问题。但是对不起,我无法理解所读内容。如果您能帮助我,那就太好了。我记得我读过一些有关范围的文章,所以eval()和Web控制台是否有其他范围?如果是,为什么这会使Web控制台更安全?
感谢您的建议!
达斯·月亮
编辑:为什么通过Web控制台/通过eval传递代码根本很危险?虽然我会在客户端执行js吗?
答案 0 :(得分:1)
在其中执行代码都不安全;两者都可能导致XSS攻击。
在这方面,Web控制台与已评估的代码一样容易受到攻击。
但是,它们的确有不同的作用域。
eval()
在全局范围或局部范围内起作用,具体取决于调用方式:
从ECMAScript 5开始,如果通过除eval以外的引用调用eval函数来间接使用eval函数,则它将在全局范围而不是局部范围内工作。例如,这意味着函数声明创建了全局函数,并且被评估的代码无法访问被调用范围内的局部变量。
然后Web控制台在页面窗口范围内执行代码。
值得注意的是,浏览器控制台 has a different scope 到 Web控制台,该浏览器在浏览器的chrome窗口下运行:
类似地,您可以使用浏览器控制台执行JavaScript表达式。但是,尽管Web控制台在页面窗口范围内执行代码,但浏览器控制台在浏览器的chrome窗口范围内执行代码。