Кодировать атрибуты HTML при вставке HTML в DOM - PullRequest
0 голосов
/ 11 января 2012

У меня есть вопросы по предотвращению атак XSS.

1) Вопрос:

У меня есть шаблон HTML в виде строки Javascript (доверенный) и вставка содержимого, поступающего по запросу сервера (ненадежный).Я заменяю местозаполнители в строках HTML-шаблона этим ненадежным контентом и выводю его в DOM, используя innerHTML / Text.

В частности, я вставляю тексты, которые выводим в тегах <div> и <p>, которые уже присутствуютв строке шаблона HTML и значениях элементов формы, т. е. текстах в атрибуте значения входного тега, тегах select и textarea.

Правильно ли я понимаю, что каждый вставленный выше текст можно рассматривать как подконтекст HTML, поэтому я кодирую тольковот так: encodeForJavascript (encodeForHTML (вставленный_текст)).Или мне нужно кодировать тексты, которые я вставляю в атрибуты значений полей ввода для подконтекста атрибутов HTML?

После прочтения этого вопроса в OWASP я склонен думать, что последнее необходимо только в случаеЯ устанавливаю атрибут с ненадежным контентом через Javascript следующим образом: document.forms[ 0 ].elements[ 0 ].value = encodeForHTMLAttribute, это правильно?

2) Вопрос:

Каково дополнительное значение ответов сервера кодирования на стороне сервера, которые входят вклиентская сторона через Ajax и все равно обрабатывается (как в вопросе 1).Кроме того, разве мы не рискуем проблемами при двойном кодировании контента?

Спасибо

1 Ответ

1 голос
/ 11 января 2012

Вам необходимо кодировать для рассматриваемого контекста, поэтому данные, вставленные в контекст html, должны быть закодированы для html, а данные, вставленные в атрибуты html, должны быть закодированы как атрибут html.Это дополнение к упомянутой вами кодировке javascript.

Я бы закодировал javascript для передачи, а затем кодировал бы для правильного контекста клиентской стороны, где я знаю, какой контекст является правильным.

...