Попытка создать пример XSS на основе DOM

0

Я пытаюсь узнать больше о предотвращении 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());

Что мне не хватает?

  • 0
    кстати, я знаю, что значением поля ввода является правильная полная строка (отладчик). Я полагаю, что оно усекается где-то вокруг присваивания innerHTML.
Теги:
security
xss

1 ответ

1
Лучший ответ

Вставка кода JavaScript в <script> в DOM не приводит к выполнению кода. Теги inline <script> выполняются только при загрузке страницы.

Ничто не усекается в < персонаже. Вы можете видеть, что если вы пытаетесь ввести HTML, например, <b>test</b>

Если вы хотите использовать XSS с использованием тегов <script>, вам нужно будет сделать что-то вроде запроса на страницу с HTML в параметре строки запроса, а затем повторить его на странице с помощью языка сервера, такого как PHP.

  • 0
    Спасибо за ответ. Я пытаюсь эмулировать XSS-атаку на основе DOM, которая полностью на стороне клиента. Мне не нужно возвращаться на сервер для атаки на основе DOM. По крайней мере, это мое понимание.
  • 0
    Ну, вы могли бы сделать поле ввода и затем вызвать eval () для всего, что набрано в ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню