Я пытаюсь узнать больше о предотвращении XSS и при этом написал несколько действительно простых javascript, которые, как я думал, позволят XSS
<label id="searchLbl" for="search">Search</label>
<input id="search" autocomplete="off"/>
<div id="results"></div>
<script>
document.getElementById('search').addEventListener('keypress', function(e) {
var code = e.keyCode || e.which;
if (code === 13) {
document.getElementById('results').innerHTML = document.getElementById('search').value;
}
});
</script>
Этот код отлично подходит для ввода того, что я ввожу в поле ввода, и показывая его в div результатов. Однако, если я попробую ввести:
<script>alert("Failed");</script>
Как Chrome (v31), так и Firefox (v25.0.1) отказываются устанавливать значение div innerHTML в значение. Похоже, что любая строка, которая имеет в ней символ <, усекается в первом экземпляре символа.
Использование jQuery вместо JavaScript не выполняется, как я ожидал.
$('#results').html($('#search').val());
Что мне не хватает?
Вставка кода JavaScript в <script>
в DOM не приводит к выполнению кода. Теги inline <script>
выполняются только при загрузке страницы.
Ничто не усекается в <
персонаже. Вы можете видеть, что если вы пытаетесь ввести HTML, например, <b>test</b>
Если вы хотите использовать XSS с использованием тегов <script>
, вам нужно будет сделать что-то вроде запроса на страницу с HTML в параметре строки запроса, а затем повторить его на странице с помощью языка сервера, такого как PHP.