2013-09-23 3 views
0

Я хочу, чтобы XSS с нашим кодом, проблема в том, что это может потребовать как JS, так и html-экранирование и может быть немного сложным.Проблема с сценарием на кросс-сайтах

В следующем примере кода похож на наш код

<script> 
    var CURRENT_VALUE = '<img src=1 onerror=alert(1)>'; 
    document.getElementById("valueBox").innerHTML = CURRENT_VALUE; 
</script> 

давайте предположим, что CURRENT_VALUE вставляется динамически. Итак, что мне делать в этом случае, я знаю, что простая HTML-кодировка может не работать, так как злоумышленник может передать экранированное значение unicode, и он может быть сброшен в документ, когда парсер JS очистит его.

Так что это правильный путь,

Если я первым сделать JS побега и перед document.getElementById сделать HTML вытекающее? Как это будет работать?

Предполагая CURRENT_VALUE это сказать шестнадцатеричном и содержит/x027img ... и так далее

+0

Я не вижу, как это может быть XSS родственный Preve (?) nting XSS больше касается дезинфекции содержимого входных серверов. Вышеуказанный скрывает , если вы нажмете «просмотреть исходный код», но это не мешает вставлять код зла в поле ввода или текстовое поле. – davidkonrad

+0

Я бы подумал, что любая клиентская сторона была довольно бесполезной, когда дело доходит до безопасности. Вы должны предположить, что его можно манипулировать и иметь дело с проверкой правильных/ожидаемых значений на стороне сервера. –

+0

Можно использовать экранирование JS на стороне сервера, но если мне нужно также использовать экранирование HTML на стороне сервера, тогда мне нужно сделать это в первом порядке экранирования html, следуя экранированию JS, поскольку html интерпретируется последним, но может возникнуть проблема при интерпретации в контексте, отличном от html, следовательно, мне может потребоваться экранирование JS на стороне сервера, за которым следует javascript на стороне клиента, но я не уверен в этом. – Kalyan

ответ

1

Сейчас я думаю Я понимаю, где вы направляетесь - вставить содержимое как TextNode делает некоторые элементы форматирования:

var CURRENT_VALUE = '<img src=1 onerror=alert(1)>'; 
var node = document.createTextNode(CURRENT_VALUE); 
var valueBox = document.getElementById("valueBox"); 
valueBox.appendChild(node); 

console.log(valueBox.innerHTML); 

, если вы посмотрите на вывод консоли вставленный HTML теперь:

&lt;img src=1 onerror=alert(1)&gt; 
+0

да, спасибо :), но мне нужно быть понятным, когда это экранирование должно быть выполнено, если CURRENT_VALUE уже экранирован с использованием кодировки JS hex, все, что у нас есть, - это/x026/x034? так будет ли createtextnode этого ввода правильно html экранирован? Спасибо за ответ, хотя – Kalyan

+0

@Kalyan Если это JS hex экранированный, то 'createTextNode' будет интерпретировать его как неэкранированное значение правильно, и все будет хорошо. – SilverlightFox

+0

Спасибо, имеет смысл, теперь он может работать и в контексте не html с createTextNode – Kalyan

Смежные вопросы