代码之家  ›  专栏  ›  技术社区  ›  royatirek

set.constructor`alert\x28document.domain\x29``含义

  •  2
  • royatirek  · 技术社区  · 6 年前

    我在学习XSS时遇到了在浏览器中工作的语法。有人能告诉我为什么要详细地执行它吗?

    Set.constructor`alert\x28document.domain\x29```
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   georg    6 年前

    这很有趣。我们已经得到

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

    让我们首先考虑这一部分:

    Set.constructor`alert(...)`
    

    是一个 tagged template literal ,并等效于以下函数调用(如果没有 ${...} 背景中的占位符):

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

    Set 是一个类,它是JS中的函数,因此 Set.constructor Function 也就是说,上面的内容与

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

    或者,因为 功能 将IT参数转换为字符串,

     Function('alert(...)')
    

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

    现在,我们又有两个背景,因此我们的整体表达式变为:

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

    它也是一个带标记的文本,相当于一个函数调用

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

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

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