我正在研究一个webapp来教授编程概念。网页有一些关于编程概念的文本,然后让用户在JavaScript代码中输入文本编辑器窗口以尝试回答编程问题。当用户点击“提交”时,我分析他们输入的文本,看看他们是否已经解决了这个问题。例如,我要求他们“编写一个名为f
的函数,其中增加了三个参数”。如何安全地“评估”网页中的用户代码?
下面是我在做什么,以分析用户的文本:
- 运行的JSLint上严格设置文本,特别而不承担浏览器或控制台功能。
- 如果有任何错误,请显示错误并停止。
eval(usertext);
- 循环遍历条件以传递作业
eval(condition)
。示例条件是"f(1)===4"
。条件来自可信来源。 - 显示通过/失败的条件。
我的问题:这是否足够防止安全问题?我还有什么可以做的偏执?有没有更好的方式去做我想要的?
如果相关,我的应用程序在Google App Engine上与Python后端,使用JQuery,拥有单独的用户帐户。
我不知道jsfiddle是否有任何可用的源/注释...我相信在某些时候它只是归结为不容易受到XSS或类似的网站。(XSS会*允许其他人*给出一个链接代码在该页面上评估,然后可以“运行”为实际查看该链接的用户)。 – 2011-07-15 23:12:35
我必须说当我使用JSLint扫描我的JS压缩之前的问题我尝试并禁用我可以简单地代表作者的偏好而不是实际上代码问题的每个特征,然后我忽略它说的90%并查找缺少的分号等。如果我是你,我会考虑你的用户会喜欢阅读JSLint发现的'错误'。 – tomfumb
这是一个好点,我会添加一个选项来关闭“文体”检查。但是我想要默认的是严格的,项目的一部分就是教干净的javascript编程。 –