setTimeout()和setInterval()可以用来注册在指定的时间之后单次或重复调用的函数。

由于历史原因,第一个参数可以作为字符串传入,相当于执行eval(),因此可以作为XSS Payload使用。

语法

var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
var timeoutID = scope.setTimeout(function[, delay]); 
var timeoutID = scope.setTimeout(code[, delay]);

参数

code 参数,使用字符串来替代函数,在delay毫秒之后编译和执行字符串,相当于执行eval()函数。

delay 参数,可选,默认为0毫秒。当以0毫秒的超时时间来调用setTimeout(),那么指定的函数并不会立刻执行。相反,回把它放到队列中,等前面处于等待状态的事件处理程序全部执行完成后,才会调用。

param 参数,向回调函数function传递额外参数。

返回值

返回值 timeoutID是一个正整数,表示定时器的编号。

定时器的编号可以传递给clearTimeout()和clearInterval()来取消定时器。

演示

setTimeout('alert(1)');

1.png

setTimeout('\x61\x6c\x65\x72\x74\x28\x31\x29');

2.png

3.png

相关文章

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/setTimeout

《JavaScript权威指南》14.1 定时器


本文由 TEag1e 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

2 条评论

  1. _kp
    _kp

    这个技巧可以用于解决拼接多条payload时成功率低的问题,用setInterval持续执行

    1. TEag1e
      TEag1e

      搜嘎,谢谢分享 icon_razz.png

添加新评论

icon_redface.gificon_idea.gificon_cool.gif2016kuk.gificon_mrgreen.gif2016shuai.gif2016tp.gif2016db.gif2016ch.gificon_razz.gif2016zj.gificon_sad.gificon_cry.gif2016zhh.gificon_question.gif2016jk.gif2016bs.gificon_lol.gif2016qiao.gificon_surprised.gif2016fendou.gif2016ll.gificon_mrgreen.pngicon_neutral.pngicon_twisted.pngicon_arrow.pngicon_eek.pngicon_smile.pngicon_confused.pngicon_cool.pngicon_evil.pngicon_biggrin.pngicon_idea.pngicon_redface.pngicon_razz.pngicon_rolleyes.pngicon_wink.pngicon_cry.pngicon_surprised.pngicon_lol.pngicon_mad.pngicon_sad.pngicon_exclaim.pngicon_question.pngicon_rolleyes.gif2016gz.gif2016kun.gif2016zhem.gif2016am.gif2016kel.gificon_twisted.gif2016lh.gificon_neutral.gif2016ka.gif2016tx.gificon_evil.gif2016bb.gif2016yun.gif2016qq.gif2016baojin.gificon_confused.gif2016kk.gif2016zk.gif2016kb.gificon_mad.gif2016yhh.gificon_exclaim.gif2016xia.gif2016gg.gif2016qd.gificon_smile.gif2016lengh.gificon_biggrin.gif2016bz.gif2016wq.gificon_eek.gificon_arrow.gificon_wink.gif2016tuu.gif