2014-05-29 2 views
1

Я делал google игры XSS (https://xss-game.appspot.com/level2), но я не мог понять, почему уровень 2 не работал так, как я ожидал. Хотя подсказка говорит, что теги скрипта не будут работать, я не знал почему. Мой вопрос в основном заключается в том, когда выполняются динамические скриптовые теги и это зависит от браузера?Когда выполняются динамические скрипты?

Я пытался что-то простое, как:

<script>alert();</script> 

И в то время как он добавляет элемент на страницу, он не делает то, что я надеялся.

Я нашел этот пост, который имеет ту же проблему, но решение только ответ, но не объяснение: Dynamically added script will not execute

+2

Я могу вам сказать, что добавление ''

0

Ответ на ваш вопрос: <script> теги, добавленные через .innerHTML, не выполняются.

От https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML:

соображения безопасности

Это не редкость увидеть innerHTML используется для вставки текста на веб-странице. Это связано с угрозой безопасности.

var name = "John"; 
// assuming el is an HTML DOM element 
el.innerHTML = name; // harmless in this case 

// ... 

name = "<script>alert('I am John in an annoying alert!')</script>"; 
el.innerHTML = name; // harmless in this case 

Хотя это может выглядеть как сценариев атаки межсайтового, результат безвреден. HTML5 указывает, что тег, вставленный через innerHTML, не должен выполняться.

Однако существуют способы выполнения JavaScript без использования элементов, поэтому при использовании innerHTML для установки строк, по которым у вас нет контроля, существует риск для безопасности. Например:

var name = "<img src=x onerror=alert(1)>"; 
el.innerHTML = name; // shows the alert 
Смежные вопросы