首页 > 解决方案 > set.constructor`alert\x28document.domain\x29```含义

问题描述

我正在学习 XSS,我遇到了这种在浏览器中工作的语法。谁能告诉我为什么要详细执行。

Set.constructor`alert\x28document.domain\x29```

标签: javascriptecmascript-6

解决方案


那很有意思。我们有

 Set.constructor`alert(...)```

让我们首先考虑这部分:

Set.constructor`alert(...)`

是一个带标签的模板文字${...},等效于以下函数调用(假设反引号内没有占位符):

 Set.constructor(['alert(...)'])

Set是一个类,在JS中是一个函数,因此Set.constructorFunction,也就是与上面相同

 Function(['alert(...)'])

或者,由于Function将其参数转换为字符串,

 Function('alert(...)')

它从给定的文本内容动态创建一个函数。

现在,我们还有两个反引号,所以我们的整体表达式变为:

Function('alert(...)')``

这又是一个标记文字,相当于一个函数调用

Function('alert(...)')([''])

它使用垃圾参数调用我们新创建的函数。

换句话说,这是一种创造性的方式eval


推荐阅读