Как обойти кодирование на стороне клиента в XSS - PullRequest
2 голосов
/ 11 февраля 2012

Я слышал, как все говорят, что выходное кодирование должно выполняться на стороне клиента, а не на стороне сервера. Мой вопрос: это не зависит от контекста?

  1. Есть ли случаи, когда выходное кодирование на стороне клиента достаточно хорошее и нельзя обойти?
  2. Если я использую функцию js на стороне клиента, например encodeURIComponent, для кодирования URL, вызывающего XSS, как злоумышленник может обойти это и при этом вызвать XSS?
  3. Фишинг также может произойти из-за XSS. Если я хотя бы сделаю выходное кодирование, можно ли предотвратить фишинг?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Короткий ответ: кодирование XSS должно происходить там, где данные помещаются в html или javascript, будь то на стороне сервера и / или на стороне клиента.Я мог бы легко представить, что данные, помещенные в тег сценария на стороне сервера, начинают должным образом кодироваться, но затем JavaScript на стороне клиента использует это значение небезопасным способом, создавая уязвимость XSS.данные в веб-страницу (будь то в html-теге, внутри -tags, в css. и т. д. - см. таблицу предупреждений OWASP XSS), которые мы должны кодировать.Затем, когда мы переходим на сторону клиента, нам также необходимо убедиться, что наш javascript не представляет проблем XSS.Например, это может быть XSS на основе DOM или пример, упомянутый выше.

Так что мой ответ таков: вам нужно выполнить кодирование как на стороне сервера, так и на стороне клиента.

Не знаюпонять, как связан третий вопрос.Фишинг может происходить разными способами.На совершенно другом домене, просто имитирующем исходную страницу и т. Д.

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

1 голос
/ 18 февраля 2014

Ответ Эрленда прекрасен.Я хочу поделиться своими выводами относительно выходной кодировки.

Выходное кодирование на стороне сервера лучше, чем на стороне клиента.

Вы можете получить больше знаний о выходном кодировании от OWASP Xss Prevention

, и вы можете сделать это и на стороне клиента.Если вы собираетесь использовать недоверенные (данные, вводимые пользователем) в HTML-контексте, пожалуйста, используйте нативный api innerText IE Docs javascript (textContent для moz) или кодируйте символы (<,>, ', ",/,) в html-сущность

...