javascript - set.constructor`alert\x28document.domain\x29```含义
问题描述
我正在学习 XSS,我遇到了这种在浏览器中工作的语法。谁能告诉我为什么要详细执行。
Set.constructor`alert\x28document.domain\x29```
解决方案
那很有意思。我们有
Set.constructor`alert(...)```
让我们首先考虑这部分:
Set.constructor`alert(...)`
是一个带标签的模板文字${...}
,等效于以下函数调用(假设反引号内没有占位符):
Set.constructor(['alert(...)'])
Set
是一个类,在JS中是一个函数,因此Set.constructor
是Function
,也就是与上面相同
Function(['alert(...)'])
或者,由于Function
将其参数转换为字符串,
Function('alert(...)')
它从给定的文本内容动态创建一个函数。
现在,我们还有两个反引号,所以我们的整体表达式变为:
Function('alert(...)')``
这又是一个标记文字,相当于一个函数调用
Function('alert(...)')([''])
它使用垃圾参数调用我们新创建的函数。
换句话说,这是一种创造性的方式eval
。
推荐阅读
- google-sheets - Google 表格 - 将数据显示到另一个选项卡(如果存在)
- html - 使用悬停功能时如何解决此溢出问题
- java - Java 应用程序/IDE 未打开(IntelliJ、Toolbox、NetBeans)
- c++ - 获取 Y/n 的输入,不输入就获取 'n'?
- css - 动画 SVG 箭头和 z-index
- github-cli - 如何在通过 Git-CLI 创建 repo 时将 gitignore 文件和许可证设置为 None 并将 add "origin" git remote 设置为 Yes all?
- sql - 如何统计同一天发生的客户行为发生次数?
- python - 我在 django 中收到 No reverse match 错误,但它使用 urls.py
- java - Android(Java)是否有任何类似于 PHP 的 file_get_contents($url) 的功能?
- flutter - 如何使用 FLUTTER-FFMPEG 对图像和视频应用过滤器