Значение Set.constructor`alert \ x28document.domain \ x29``` - PullRequest
0 голосов
/ 07 декабря 2018

Я изучал XSS и наткнулся на этот синтаксис, который работает в браузере.Может кто-нибудь сказать мне, почему это выполняется в деталях.

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

1 Ответ

0 голосов
/ 07 декабря 2018

Это интересно.У нас есть

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

Давайте сначала рассмотрим эту часть:

Set.constructor`alert(...)`

является теговым литералом шаблона и эквивалентен следующему вызову функции (при условии* * * * * * не содержит ${...} заполнителей внутри обратных кавычек):

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

Set - это класс, который является функцией в JS, поэтому Set.constructor равен Function, то есть приведенное вышетак же, как

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

или, поскольку Function преобразует свои аргументы в строки,

 Function('alert(...)')

, которая динамически создает функцию из заданного текстового содержимого.

Теперь у нас есть еще два обратных знака, так что наше общее выражение становится:

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

, которое снова является литералом с тегом и эквивалентно вызову функции

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

который вызывает нашу вновь созданную функцию с пустым аргументом.

Другими словами, это творческий способ eval вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...