我有一个计算器小部件(jsfiddle),它使用javascript的eval()
函数来评估用户的输入作为计算器。它是chrome扩展中的嵌入式小部件,因此它没有任何可能受到伤害的数据库或任何其他附加的小部件,并且它不会发送或接收任何数据。
显然,由于它使用了javascript的eval
函数,因此任何javascript都可以通过此框执行。这有什么风险吗?我是javascript的新手,所以我不确定用户能否在这个小部件中评估自己的javascript会导致什么结果。他们做的任何事情都不会在刷新后恢复吗?
答案 0 :(得分:1)
JavaScript在客户端运行,因此您的服务器没有任何迫在眉睫的危险。
但是,如果用户可以以某种方式保存他们的输入并给出其他用户的链接,这可能是一个问题,因为这将允许执行任意JavaScript(即:Cross-site scripting aka XSS)
答案 1 :(得分:1)
所有其他“eval是邪恶的”和“代码质量”问题放在一边......
...安全问题不是关于允许用户提供的代码:用户可以删除他们拥有的每个文件。不推荐,但完全可能。
使用JavaScript的危险,无论是eval()
还是其他方式,都允许攻击者代表用户运行代码(未经同意),在所述用户的上下文中(ergo浏览器/域名)。
跨站点脚本漏洞是Web应用程序漏洞,允许攻击者绕过客户端安全性......通过找到将恶意脚本注入网页的方式 [可能涉及或不涉及eval] ],攻击者可以获得对敏感页面内容,会话cookie以及浏览器代表用户维护的各种其他信息的提升访问权限。因此,跨站点脚本攻击是代码注入的一种特殊情况。
快乐的编码。
答案 2 :(得分:0)
请参阅:高效JavaScript代码中的"eval is evil":
'eval'方法以及诸如'new Function'之类的相关结构非常浪费。它们有效地要求浏览器创建一个全新的脚本环境(就像创建一个新的网页一样),从当前作用域导入所有变量,执行脚本,收集垃圾,然后将变量导回原始环境。此外,无法缓存代码以进行优化。如果可能的话,应该避免使用eval及其亲属。