Является ли htmlentities () доказательством пули?

Я спрашивал себя о безопасности использования функции php htmlentities () от атак XSS и, возможно, связанных функций, таких как htmlspecialchars.

большое спасибо 🙂

Вам нужно будет явно указать правильное кодирование (например: utf-8), у Криса была запись о том, как вводить код, даже вызывая htmlentities без соответствующей кодировки.

http://shiflett.org/blog/2005/dec/google-xss-example

Он не пуленепробиваемый, он никогда не спасает вас на 100%. Вы должны помнить, что когда дело доходит до безопасности, разработчик несет за это ответственность. Языки действительно предоставляют множество функций безопасности, и, кроме того, разработчик знает, как они защищают свой сайт, независимо от того, используют ли они белый или черный подход. Если бы htmlentities были все, такие рамки, как codeigniter, kohana и другие, не придумали бы свои собственные функции безопасности.

Самое главное – санационализировать и фильтровать любые входящие данные от пользователя.

Нет, такие функции, как htmlspecialchars и htmlentities , не защищают от всех случаев межсайтового скриптинга.

Случаи, в которых эти функции не помогут:

  • Данные эксплойта не доходят до сервера (XSS на основе DOM).
  • Данные эксплойта не интерпретируются только в контексте HTML, и специальные символы, закодированные этими функциями, либо не являются обязательными, либо не единственными, которые являются особыми в соответствующем контексте .

Особенно последняя причина часто упускается. Есть много примеров в OWASP's XSS Prevention Cheat Sheet, где инъекция может произойти в HTML-документе. Но не все требуют каких-либо специальных символов HTML для ввода и выполнения кода JavaScript.