Что ты встраиваешь?
Если вы встраиваете простой текст, встроенный в HTML, встроенный в JavaScript, например, document.write("your text here")
тогда вам нужно кодировать HTML перед кодированием JS.
Если вы встраиваете простой текст, встроенный в JavaScript, встроенный в HTML, например, <button type=button onclick="alert('your text here')">
тогда вам нужно сделать это в обратном порядке.
Вы можете думать об этом как о типовой проблеме. У вас есть строка типа string<plain_text>
, и когда вы делаете что-то вроде "<a ...>" + myPlainTextString + "</a>"
, вы пытаетесь добавить 3 строки из string<html>
, и чтобы сделать это правильно, вам необходимо кодировать / привести строку простого текста к string<html>
так что вы делаете "<a ...>" + htmlEncode(myPlainTextString + "</a>"
.
Таким образом, 3 слоя встраивания - это то же самое, что 3 слоя приведения типов. Теперь, если бы я только мог убедить разработчиков систем языковых типов встроить проверки для такого рода вещей:)