2016-01-23 2 views
1

Я знаю, что уязвим как хакер может встроить изображение, которое посещает URL сайта и сделать все виды с параметром «сообщения»:Является ли это уязвимым для XSS?

<script> 
var message = // get message parameter from URL, e.g domain.com?message=hello+there 
document.write('Your message: ' + message); 
</script> 

... но есть ли способ, хакер мог бы сделать что-нибудь с этим (самостоятельно, без какого-либо другого JS) ?:

<script> 
function displayMessage(message) { 
    document.write(message); 
} 
</script> 

Очевидно, что я мог бы открыть консоль в браузере и ничего типа, но может хакер вызвать метод JavaScript каким-то образом (с этим кодом в одиночку)?

Я знаю, что метод может быть вызван, если на веб-сайте также был код на самом верху, но может ли метод быть вызван сам по себе?

КПП. Я не собираюсь делать это выше, это просто помогает мне понять это.

Что я пробовал?

+5

Все, что вы сделали, это обернуть его функцией, да оно все еще уязвимо. – Ian

+1

Что означает «получить параметр сообщения из URL»? Вы имеете в виду «сообщение» - это ненадежная строка, которая может содержать любой вредоносный код? – Oriol

+0

Мне просто интересно, какой будет домен, если 'document.write' был вызван после того, как страница была проанализирована? Он откроет новый документ, но сохранился ли исходный домен? – Teemu

ответ

2

В первом коде message является ненадежной строкой wh ich может содержать вредоносный код. Синтаксический как HTML может выполнить этот код:

var message = '<img src="//" onerror="alert(\'You are pwned!\')" />'; 
 
document.write('Your message: ' + message);

Второй код отличается. Это просто функция, она ничего не запускает сама по себе.

Конечно, если вы называете это ненадежной строкой, у вас будет такая же проблема, как в первой. Поэтому не делайте этого.

Однако злоумышленники не могут называть произвольные функции. Ну, если они могут, значит, вы уже выложены, так что это уже не имеет значения. Я имею в виду, если злоумышленник получил достаточно «привилегий», чтобы иметь возможность позвонить displayMessage, зачем звонить ему, а не звонить document.write (или что-то еще) прямо?

+0

Спасибо. Возможно, этот вопрос был слишком очевиден, но я просто хотел быть уверенным в моем понимании. Вопрос мне казался ясным, но я думаю, что некоторые люди этого не понимали. Я снова прочитаю свой вопрос и подумаю, могу ли я улучшить то, как я их буду строить в будущем. – user2143356

Смежные вопросы