#javascript #xss
#javascript #xss
Вопрос:
Если я введу это в консоль Chrome, я получу предупреждение, отображающее:
'some string'-alert(1)-'another string'
Если я вместо этого введу следующее, я получу Uncaught SyntaxError: Unexpected identifier
:
'some string'alert(1)'another string'
Какое значение имеют дефисы, позволяющие выполнить оповещение?
Комментарии:
1. Оценивается как минус без дефиса
Ответ №1:
Первый оценивается как: Строка .. минус .. результат вызова функции .. минус .. Строка.
Использование вычитания со строками приводит их к числовому или NaN
Предупреждение срабатывает просто потому, что это функция. Возвращаемое значение не определено.
Таким образом, после срабатывания предупреждения вы фактически получаете, NaN - undefined - NaN
который возвращает NaN
то, что вы видите в консоли
Ответ №2:
Поскольку Javascript не является строго типизированным, вы можете (попытаться) вычитать строки. Из-за этого интерпретатор оценивает каждую часть выражения, одной из которых является alert
. Это приводит к появлению всплывающего окна. Интерпретатор / компилятор не может скомпилировать второй из-за неправильного синтаксиса.