Межсайтовый скриптинг (XSS) с использованием дефиса

#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 . Это приводит к появлению всплывающего окна. Интерпретатор / компилятор не может скомпилировать второй из-за неправильного синтаксиса.