Достаточно ли String.stipTags () для смягчения атак XSS? - PullRequest
2 голосов
/ 24 мая 2009

Я создаю эту HTML-страницу в кодировке UTF-8, где пользователь может предоставить ввод. Я хотел сделать это доказательство XSS. Я натолкнулся на эту бесплатную инфраструктуру Javascript под названием Prototype, которая предоставляет некоторые полезные функции. Одна конкретная функция stripTags по существу удаляет все теги из входной строки. Может ли следующая обработка ввода предотвратить XSS?

  1. Выполнить тщательное UTF-8 декодирование ввода (учитывая все возможные представления UTF-8)
  2. Преобразование сущностей символов HTML в символы
  3. Запустите stripTags поверх декодированной преобразованной строки, чтобы удалить все возможные теги

Одним из распространенных комментариев к попыткам antiXSS в Javascript является то, что пользователь может обойти систему. Как это возможно? В моем случае пользователь, пользующийся системой, заслуживает доверия. Однако другие пользователи, которые ранее могли использовать эту же машину, могут быть злонамеренными.

Ответы [ 2 ]

3 голосов
/ 26 мая 2009

Вам нужно только изменить:

  • & до &
  • < до &lt;
  • " до &quot; (если вы используете одинарные кавычки в атрибутах, также ' до &#39;)

Если вы уже экранировали специальные символы HTML, то там нет тегов и теги strip ничего не делают.

Если вы используете метки вместо для экранирования, то посторонний ввод сможет экранировать атрибуты HTML, например ::101023

<input value="$foo">

, если $foo:

" src="404" onerror="evil()

А если вы хотите вставить ненадежный контент в JavaScript (внутри <script>), тогда применяются другие правила:

  • Сущности HTML, не интерпретируемые в <script>, поэтому не используйте их там для экранирования.
  • Использовать правила экранирования строки JavaScript (\\\, "\") и заменить все вхождения </ на <\/.
0 голосов
/ 08 октября 2010

Если среда javascript запускается на компьютере, на котором предоставляется ввод, это небезопасно (вы могли бы доверять содержимому потенциально вредоносного клиента.

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

Хорошее практическое правило заключается в том, что ограничения безопасности обычно применяются на стороне сервера, где пользователь не может просто их обойти. Из того, что я помню, в PHP есть функция стрип-тэгов для этого, и в Apache StringEscapeUtils для java есть аналогичная функциональность. Я уверен, что есть что-то похожее в .net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...