2

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

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

Можете ли вы предоставить еще несколько контекстов? Кодирование на стороне клиента XSS, что теперь? – deceze

ответ

2

Короткий ответ заключается в том, что кодирование XSS должно происходить там, где данные помещаются в html или javascript, будь то серверный сервер и/или клиентская сторона. Я легко мог представить, что данные, помещенные в тег скрипта на стороне сервера, начинают правильно кодироваться, но javascript на стороне клиента использует это значение небезопасным образом, создавая уязвимость XSS.

Таким образом, если вы помещаете недоверенные данные в веб-страницу (будь то в теге html, внутри -tags, в css и т. Д. - см. Чит-лист защиты OWASP XSS), нам нужно закодировать. Затем, когда мы приходим на сторону клиента, нам также нужно убедиться, что наш javascript не представляет проблем XSS. Это может быть, например, XSS на основе DOM или пример, упомянутый выше.

Так что я отвечаю, вам нужно сделать кодировку как на стороне сервера, так и на стороне клиента.

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

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

1

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

Кодировка вывода, выполненная на стороне сервера, лучше, чем на стороне клиента.

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

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

Смежные вопросы