Как не выйти из HTML в JavaScript? [дубликат]

В C компилятор может обычно оптимизировать их, чтобы быть тем же, если результат не использован.

Однако в C++ при использовании других типов, которые обеспечивают их собственное ++ операторы, версия префикса, вероятно, будет быстрее, чем постфиксная версия. Так, если Вам не нужна постфиксная семантика, лучше использовать префиксный оператор.

17
задан DFectuoso 7 July 2009 в 02:15
поделиться

4 ответа

Измените тестовую строку на & lt; b & gt; & lt; & lt; & amp; & amp; & amp; & lt; / b & gt; , чтобы лучше понять, каков риск ... (или лучше, & lt; img src = 'http: //www.spam.com/ASSETS/0EE75B480E5B450F807117E06219CDA6/spamReg.png' onload = 'alert (document.cookie);' & gt; для спама с кражей файлов cookie)

См. пример по адресу http://jsbin.com/uveme/139/ (на основе вашего примера с использованием прототипа для отмены экранирования). Попробуйте нажать четыре разные кнопки чтобы увидеть различные эффекты. Только последний представляет угрозу безопасности. (Вы можете просмотреть / отредактировать исходный код на http://jsbin.com/uveme/139/edit ) Пример фактически не ворует ваши куки ...

  1. Если ваш текст поступает из заведомо безопасного источника и не основан на вводе пользователем , тогда вы в безопасности.
  2. Если вы используете createTextNode для создания текстовый узел и appendChild , чтобы вставить этот неизмененный объект узла прямо в ваш документ , вы в безопасности.
  3. В противном случае вам необходимо принять соответствующие меры, чтобы гарантировать, что небезопасный контент может ' t сделать это в браузере вашего зрителя.

Примечание: Как указал Бен Винегар Использование createTextNode не является волшебной пулей: используйте его для экранирования строки, а затем используйте ] textContent или innerHTML для вывода экранированного текста и других действий с ним не защитит вас при дальнейшем использовании. В частности, метод escapeHtml в Питере Брауне '

11
ответ дан 30 November 2019 в 13:34
поделиться

Попробуйте функции escape и unescape, доступные в Javascript

Подробнее: http://www.w3schools.com/jsref/jsref_unescape.asp

2
ответ дан 30 November 2019 в 13:34
поделиться

Некоторые догадки, чего это стоит.

innerHTML - это буквально браузер, интерпретирующий hte html.

поэтому <становится меньше символа, потому что это произойдет, если вы поместите <в html document.

Самый большой риск для безопасности строк с & - это выражение eval, любой JSON может сделать приложение небезопасным. Я не специалист по безопасности, но если строки остаются строками, то все должно быть в порядке.

Это еще один способ защиты innerHTML: неэкранированная строка превращается в HTML, поэтому нет никакого риска, что она запустит javascript.

2
ответ дан 30 November 2019 в 13:34
поделиться

Пока ваш код создает текстовые узлы, браузер НЕ должен отображать ничего вредного. Фактически, если вы проверите источник сгенерированного текстового узла с помощью Firebug или панели инструментов IE Dev, вы увидите, что браузер повторно экранирует специальные символы.

присвойте ему

"<script>"

, и он повторно экранирует его, чтобы :

"&lt;script&gt;"

Есть несколько типов узлов: Элементы, Документы, Текст, Атрибуты и т. Д.

Опасность заключается в том, что браузер интерпретирует строку как содержащий сценарий. Свойство innerHTML подвержено этой проблеме, поскольку оно указывает браузеру создавать узлы Element, один из которых может быть элементом сценария или иметь встроенный Javascript, например обработчики onmouseover. Создание текстовых узлов позволяет обойти эту проблему.

если вы проверите источник сгенерированного текстового узла с помощью Firebug или панели инструментов IE Dev, вы увидите, что браузер повторно экранирует специальные символы.

присвойте ему

"<script>"

, и он повторно экранирует его на:

"&lt;script&gt;"

Существует несколько типов узлов: элементы, документы, текст, атрибуты и т. Д.

Опасность заключается в том, что браузер интерпретирует строку как содержащий сценарий. Свойство innerHTML подвержено этой проблеме, поскольку оно указывает браузеру создавать узлы Element, один из которых может быть элементом сценария или иметь встроенный Javascript, например обработчики onmouseover. Создание текстовых узлов позволяет обойти эту проблему.

если вы проверите источник сгенерированного текстового узла с помощью Firebug или панели инструментов IE Dev, вы увидите, что браузер повторно экранирует специальные символы.

присвойте ему

"<script>"

, и он повторно экранирует его на:

"&lt;script&gt;"

Существует несколько типов узлов: элементы, документы, текст, атрибуты и т. Д.

Опасность заключается в том, что браузер интерпретирует строку как содержащий сценарий. Свойство innerHTML подвержено этой проблеме, поскольку оно указывает браузеру создавать узлы Element, один из которых может быть элементом сценария или иметь встроенный Javascript, например обработчики onmouseover. Создание текстовых узлов позволяет обойти эту проблему.

Элементы, документы, текст, атрибуты и т. Д.

Опасность заключается в том, что браузер интерпретирует строку как содержащий сценарий. Свойство innerHTML подвержено этой проблеме, поскольку оно указывает браузеру создавать узлы Element, один из которых может быть элементом сценария или иметь встроенный Javascript, например обработчики onmouseover. Создание текстовых узлов позволяет обойти эту проблему.

Элементы, документы, текст, атрибуты и т. Д.

Опасность заключается в том, что браузер интерпретирует строку как содержащий сценарий. Свойство innerHTML подвержено этой проблеме, поскольку оно указывает браузеру создавать узлы Element, один из которых может быть элементом сценария или иметь встроенный Javascript, например обработчики onmouseover. Создание текстовых узлов позволяет обойти эту проблему.

1
ответ дан 30 November 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: