Действительно, точки с запятой не нужны. Я только что протестировал один и тот же тег без точек с запятой в FF5 и Chrome, они оба отправляют предупреждения с этим
<img src=x onerror=;;alert('XSS') />
<img src=x onerror=alert('XSS') />
<img src="x" onerror="alert('XSS')" />
я думаю, что они пытаются остановить событие onerror в первой точке с запятой, а затем вывести фиктивный код из события в предупреждении
Я попробовал это
<img src=x onerror=alert('eventfire');;alert('XSS') />
и включает оба предупреждения внутри события, поэтому второе предупреждение за пределами области действия не запускается.
ответ? похоже, делает то же самое без точек с запятой (может быть, для старых браузеров, которые плохо разбирают html и выполняют предупреждение вне контекста события ???)