如何安全地"评估"网页中的用户代码?

Nat*_*ead 11 javascript security eval jslint

我正在开发一个webapp来教授编程概念.网页上有一些关于编程概念的文本,然后让用户在javascript代码中键入文本编辑器窗口以尝试回答编程问题.当用户点击"提交"时,我会分析他们输入的文本以查看他们是否已解决问题.例如,我要求他们"编写一个命名f为其参数添加三个的函数".

以下是我正在分析用户文本的内容:

  1. 使用严格设置在文本上运行JSLint,特别是不使用浏览器或控制台功能.
  2. 如果有任何错误,请显示错误并停止.
  3. eval(usertext);
  4. 循环通过赋值的条件,eval(condition).一个例子是"f(1)===4".条件来自可靠来源.
  5. 显示通过/失败的条件.

我的问题:这是否足以防止安全问题?我还能做些什么才能成为偏执狂?有没有更好的方法来做我想要的?

如果它是相关的我的应用程序是在使用Python后端的Google App Engine上,使用JQuery,具有单独的用户帐户.

Rya*_*rty 11

因此,如果您仅为他们评估用户的输入,我可以告诉您,这不是安全问题.只有当他们的输入被其他用户评估时,您才会遇到问题.

评估用户的输入并不比查看源,查看HTTP标头,使用Firebug检查JavaScript对象等更糟糕.他们已经可以访问所有内容.

如果你确实需要保护他们的代码,请查看Google Caja http://code.google.com/p/google-caja/