Я только что заметил, что вы можете провести XSS-атаку, используя тире между строковыми литералами в javascript:
ie:
var foo = 'bar'-alert(1)-'baz';
//this will display the alert
у меня вопрос, что там делает интерпретатор js? что означает использование таких дефисов? Я думал, что это просто арифметический оператор.
----- ОБНОВИТЬ -----
Извините, я не объяснил реальный контекст атаки xss:
Согласен, предупреждение(1) выглядит не очень вредным. Но на самом деле это реальный пример, который я получил при сканировании безопасности, сделанном с помощью Burp Suite . Хостер донимает меня этим, но я бы посоветовал воспринимать это как ложное срабатывание уязвимости.
Во всяком случае, я использую параметр querystring для перенаправления:
http://mysite.com/foo.php?returnto=bar.php
это также сделано с помощью javascript:
echo '<script>alert("bye!");window.location="'.escapeXSS($_REQUEST['returnto']).'";</script>';
злоумышленник может вставить туда анонимную функцию, которая будет выполнена перед перенаправлением:
http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-'
результат будет:
<script>alert("bye!");windows.location='bar.php'-function(){/* do something */}()-'';</script>
это действительно приводит к выполнению функции (в зависимости от качества экранирующей функции php).