GWT SafeHTML, XSS и лучшие практики - PullRequest
5 голосов
/ 30 мая 2011

Хорошие люди из OWASP подчеркивают, что вы ДОЛЖНЫ использовать синтаксис escape для части HTML-документа, в который вы помещаете ненадежные данные (тело, атрибут, JavaScript, CSS или URL).См. OWASP - XSS .Их API (разработанный командой ESAPI) впоследствии учитывает наличие кодеров для каждого контекста:

ESAPI.encoder().encodeForHTML("input"); ESAPI.encoder().encodeForHTMLAttribute("input"); ESAPI.encoder().encodeForJavaScript("input"); ESAPI.encoder().encodeForCSS("input"); ESAPI.encoder().encodeForURL("input");

Впоследствии это позволяет разработчику обслуживать XSS на основе DOM .

Таким образом, мой вопрос заключается в том, как пакет GWT safehtml учитывает это или он просто фокусируется на кодировке HTML?

1 Ответ

4 голосов
/ 30 мая 2011

SafeHtmlTemplates сделает это (только на стороне клиента, так как он использует генератор GWT).Он будет анализировать HTML-фрагмент с помощью парсера «супа тега», который выведет контекст и запишет предупреждение или выбросит, если аргумент не может быть использован в этом контексте (например, он предотвращает любое использование заполнителей в контексте скрипта),Хотя это все еще в движении (SafeUri все еще пересматривается, а SafeStyles все еще строго ограничено), но это будет в свое время (думаю, должно быть в GWT 2.4).

В противном случае:

  • SafeHtmlUtils от всех <, >, &, ' и ", поэтомурезультат безопасен для контекстов «HTML» и «атрибут HTML»
  • SafeHtmlBuilder Различные методы добавления просто вызовут SafeHtmlUtils под капотом
  • UriUtils предоставляет инструменты для очистки небезопасных URI (вам все равно понадобится пропуск SafeHtmlUtils или эквивалентный впоследствии, если вы строите строку HTML - vs., Используя значение непосредственно для источника изображения или ссылки href -).
  • SafeStyles не предоставляет ничего конкретного, но SafeHtmlTemplates разрешает это только в начале контекста CSS и регистрирует предупреждение, если вы пытаетесь поместить что-либо еще в контекст CSS.SafeStylesBuilder предполагается расширить с помощью типобезопасных методов, чтобы помочь построить правильно сформированный CSS.
  • Я работал на SafeUri интерфейсе, аналогично SafeStyles, но в контексте URL.В свое время SafeHtmlTemplates разрешит только SafeUri или String в качестве полного значения атрибута URL, передавая от String до UriUtils, чтобы убедиться в его безопасности.

Короче говоря, я думаю, что ответ на ваш вопрос таков: да, пакет GWT safehtml удовлетворит это;но вам, вероятно, придется всегда использовать последнюю версию GWT (по крайней мере, на будущий год), чтобы быть безопасным .

...