Почему кодирование HTML предотвращает определенные атаки XSS? - PullRequest
7 голосов
/ 12 декабря 2011

Я читал, что вы HTML кодируете на обратном пути от сервера к клиенту (я думаю?), И это предотвратит многие типы атак XSS.Впрочем, я совсем не понимаю.HTML все еще будет использоваться и отображаться браузером, верно?

Как это может остановить?

Я читал об этом в разных местах, на сайтах и ​​в книгах, и нигде это не объясняет , почему это работает.

Ответы [ 2 ]

11 голосов
/ 12 декабря 2011

Подумайте об этом: как выглядит кодированный HTML? Например, это может выглядеть так:

<a href="www.stackoverflow.com">

Таким образом, он будет отображаться на клиенте как литералы (как ), а не как HTML. Это означает, что вы не увидите реальную ссылку, но сам код.

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

XSS, конечно, немного сложнее, и обычно включает в себя также и JavaScript (отсюда и межсайтовый сценарий Scripting ), но для демонстрационных целей этого простого примера должно быть достаточно; с кодом JavaScript то же самое, что и с простыми тегами HTML, поскольку XSS является частным случаем более общего внедрения HTML.

1 голос
/ 12 декабря 2011

Кодировка HTML превращает <div> в &lt;div&gt;, что означает, что любая разметка HTML будет отображаться на странице как текст, а не выполняться как разметка HTML.

Основные конвертируемые сущности:

  • & до &amp;
  • < до &lt;
  • > до &gt;
  • " до &quot;

OWASP рекомендует кодировать некоторые дополнительные символы :

  • ' до &#x27;
  • / до &#x2F;

Эти кодировки представляют собой текстовое представление символов, которые в противном случае использовались бы в качестве разметки. Если вы хотите написать a<b, вам нужно быть осторожным, чтобы <b не рассматривался как элемент HTML. Если вы используете a&lt;b текст, который будет отображаться для пользователя будет a<b.

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