【发布时间】:2013-03-21 09:28:37
【问题描述】:
我实现了一个内置在网页中的 javascript 解析器。 用户可以将 javascript 代码放在文本区域中,例如:
var i = 0;
i++;
var y = i * 10;
document.write(y);
被解析以生成一些输出(例如,document.write 流等)。
parse函数在textareachange事件产生时被调用。
function parse(text) {
try {
....
eval(text);
} catch (e) {
....
return {
status : false, output : ..., ... : ...
};
}
return {
status : true, output : ...., ... : ...
};
}
一切正常,但是当用户在文本区域中编写循环时出现问题(例如,for(var i=0; i<10; )、while(true))
因为应用程序进入了循环。
为了避免这个问题,我想问大家一些关于这个问题的问题/解决方案:
- 是否有一些 javascript 库或函数允许
eval一个 javascript 代码但没有循环? - 我可以要求在固定时间执行我的解析函数吗?在这段时间之后,我会生成一个停止 eval 函数的异常。
- 在调用
eval(text)之前,我可以调用checkIfThereAreLoops函数来分析寻找for(var i=0; i<10; )或while(true)等模式的文本。这是一个好的解决方案吗?我可以使用正则表达式来寻找这些模式吗?
【问题讨论】:
-
尽量避免eval,它说你的坏话
-
为什么不简单地验证输入并禁止(忽略或通知用户)这些恶意行为?
-
@EliranMalka — “简单”?!
-
@EliranMalka - 代码的“简单验证”就像我在第 3 点中描述的那样?
-
我可以在超时后强制停止
eval方法吗?
标签: javascript parsing loops eval