【发布时间】:2011-05-10 00:56:44
【问题描述】:
我正在制作(不是现在,但我仍然对这个游戏很好奇)使用 HTML5 和 JS 的游戏,我想要的是人们可以插入自定义脚本,但安全。
function executeCustomJS(code){
eval(code);//bad
}
当然这段代码很糟糕,因为如果代码类似于document.location.href='http://meatspn.com',那么结果会变得非常...(...)
我找到的一个解决方案是转义(如eval -> ___eval___)所有关键字,并在白名单中取消转义关键字,例如'while'、'for'、'if'、'var'、' true', 'false', ... 和 'func0', 'func1', ....,它们是游戏的东西(类似于 API)并且是安全的。
例如,
function executeCustomJS(code){
code = code.replace(/(Keyword RegEx)/g,'___$1___');
/*unescape keywords in whitelist*/
eval(code);
}
我还没有发表正则表达式和评论,但这不是问题。
假设代码中的字符串没有转义,没有可以通过转义字符串来实现的功能,并且'eval','window','document','alert','location'不在白名单中。还有一些人可以执行while(true){}这样的代码,他们不能执行document.location.href='http://meatspn.com'这样的任何代码。
这种方法安全吗?或者,是否存在更好的方法?
【问题讨论】:
标签: javascript security xss eval