Предотвращение XSS (и других атак) в контенте, созданном XSLT - PullRequest
1 голос
/ 30 января 2011

У меня есть таблица стилей XSLT, которая обрабатывает XML-документ для создания HTML.

Я понял, что можно манипулировать сайтом таким образом, чтобы пользователь мог предоставить любой XML, который ему нравится - к сожалению, этоявляется неизбежным, и поэтому я хотел бы защитить себя от XSS (и других атак), гарантируя, что моя таблица стилей XSLT способна безопасно обрабатывать любой документ.

Что мне необходимо знать для достижения этой цели?

ОБНОВЛЕНИЕ:

Я знаю, что по умолчанию XSLT экранирует выход (который можно отключить с помощью атрибута disable-output-escaping) - этого достаточно, чтобы кто-то не мог бытьумеет внедрять вредоносные элементы и атрибуты HTML?

1 Ответ

2 голосов
/ 31 января 2011

Если вы обрабатываете данные XML из ненадежного источника и отображаете результат на своем веб-сайте, всегда помните, что им нельзя доверять.

  • Никогда не следует использовать xsl: copy или xsl:копия.Если вы копируете другие узлы, кроме текста, атаки XSS будут возможны.
  • Не следует использовать сложные или рекурсивные правила.Специально созданный ввод может создать DoS путем задержки обработки XSLT или сбоя процессора.
  • Также, как вы упомянули, не отключайте экранирование выхода.

Если вы передаетеВ результате преобразования в сервер SQL вы не должны помещать какие-либо предоставленные данные в ваш запрос SQL.

Например, это BAD:

<xsl:if test="@order">ORDER BY <xsl:value-of select="@order"/></xsl:test>

Это ХОРОШО:

<xsl:if test="@order">ORDER BY
    <xsl:chose><xsl:when test="@order = 'foo'">foo</xsl:when> [...] </xsl:chose>
</xsl:test>

Если вам действительно нужно передать данные в ваш запрос, используйте переменные связывания.

...