邪恶的eval和new Function

标签: , , ,

代码:

// 友善提醒:为了你的手指安全,请在Chrome下运行
'alert("hello")'.replace(/.+/, eval);
'alert("hello")'.replace(/.+/, function(m){new Function(m)();});

var i = 0; eval(new Array(101).join('alert(++i);'));
var i = 0; new Function(new Array(101).join('alert(++i);'))();

解释:

  1. string.replace(regexp, replacement): replacement可以是function. In this case, the function is invoked for each match, and the string it returns is used as the replacement text.
  2. new Function(argument_names..., body): 注意参数中的body. 这样,用new Function('body')(), 也可以像eval一样动态执行代码。
  3. array.join(separator): 这个最简单,不多说。在这里,巧妙的用来解决了一个无聊问题:写段代码,运行后打印出从1到100的整数,不允许使用循环、跳转和递归。

这些代码可以干什么?可以肯定的是可以干很多猥琐的事。具体是啥呢,自己想啰。

原文链接:邪恶的eval和new Function

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. NDS上的FC模拟器nesDS
  2. 用VBS控制鼠标(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击)
  3. 用VBS判断无BOM头的文件是否UTF-8编码
  4. JavaScript里的sprintf函数
  5. BinScope Binary Analyzer

4 条评论 发表在“邪恶的eval和new Function”上

  1. 紫云飞说道:

    var i = 0;var sum = 0;eval(new Array(101).join(‘sum+=++i;’)+”alert(sum)”);

留下回复