我想知道是否可以在浏览器中运行JavaScript沙箱,以防止访问HTML页面中运行的JavaScript代码通常可用的功能.
例如,假设我想为最终用户提供一个JavaScript API,让他们定义在"有趣事件"发生时运行的事件处理程序,但我不希望这些用户访问该window
对象的属性和功能.我能做到吗?
在最简单的情况下,假设我想阻止用户呼叫alert
.我能想到的几种方法是:
window.alert
全球重新定义.我不认为这是一种有效的方法,因为在页面中运行的其他代码(即用户在其事件处理程序中未编写的内容)可能想要使用alert
.也许服务器处理用户定义的函数然后生成要在客户端上执行的回调的解决方案可行吗?即使这种方法有效,是否有更好的方法来解决这个问题?
我正在开发一个webapp来教授编程概念.网页上有一些关于编程概念的文本,然后让用户在javascript代码中键入文本编辑器窗口以尝试回答编程问题.当用户点击"提交"时,我会分析他们输入的文本以查看他们是否已解决问题.例如,我要求他们"编写一个命名f
为其参数添加三个的函数".
以下是我正在分析用户文本的内容:
eval(usertext);
eval(condition)
.一个例子是"f(1)===4"
.条件来自可靠来源.我的问题:这是否足以防止安全问题?我还能做些什么才能成为偏执狂?有没有更好的方法来做我想要的?
如果它是相关的我的应用程序是在使用Python后端的Google App Engine上,使用JQuery,具有单独的用户帐户.
使用javascript在浏览器中编程时限制副作用非常棘手.
我可以做一些事情,比如不要访问成员变量,就像这个愚蠢的例子:
let number = 0;
const inc = (n) => {
number = number + n;
return number;
};
console.log(inc(1)); //=> 1
console.log(inc(1)); //=> 2
Run Code Online (Sandbox Code Playgroud)
但是我可以做些什么来减少我的javascript中的副作用?