Javascript Set.constructor`alert\x28document.domain\x29``含义
我在学习XSS时遇到了这种在浏览器中使用的语法。有人能告诉我为什么它会执行得很详细吗Javascript Set.constructor`alert\x28document.domain\x29``含义,javascript,ecmascript-6,Javascript,Ecmascript 6,我在学习XSS时遇到了这种在浏览器中使用的语法。有人能告诉我为什么它会执行得很详细吗 Set.constructor`alert\x28document.domain\x29``` 那很有趣。我们有 Set.constructor`alert(...)``` 让我们先考虑这一部分: Set.constructor`alert(...)` 是,相当于以下函数调用(前提是backticks中没有${…}占位符): Set是一个类,它是JS中的一个函数,因此Set.constructor是fu
Set.constructor`alert\x28document.domain\x29```
那很有趣。我们有
Set.constructor`alert(...)```
让我们先考虑这一部分:
Set.constructor`alert(...)`
是,相当于以下函数调用(前提是backticks中没有${…}
占位符):
Set
是一个类,它是JS中的一个函数,因此Set.constructor
是function
,也就是说,上面与
Function(['alert(...)'])
或者,由于函数
将其参数转换为字符串
Function('alert(...)')
它根据给定的文本内容动态创建函数
现在,我们又有两个倒勾,因此我们的整体表达式变成:
Function('alert(...)')``
这也是一个带标记的文本,相当于一个函数调用
Function('alert(...)')([''])
它用一个垃圾参数调用我们新创建的函数
换句话说,这是一种创造性的方法来评估事物。它使用一个标记的模板文本来调用函数它触发警报的步骤是什么?@royatirek:啊,我没有注意到还有两个。。。编辑。嘿,乔治,我还有两个疑问-1。首先,让一个{constructor(abc){this.abc=abc;}}}运行这个A.constructor('alert(“Hi”)')在控制台中显示ƒanonymous(){alert(“Hi”)}。为什么它不显示完整的变量初始化。为什么它在呼叫alert2。运行.constructor()('alert(“Hi”)')不起作用,但运行.constructor('alert(“Hi”))()起作用,但据我所说,我们在这两种情况下做的都是一样的。@royatirek:有趣的问题,但在评论中有点难以回答。想发布一个新问题吗?
Function('alert(...)')([''])