htmlentities es suficiente para proteger su sitio y sus visitantes siempre y cuando no haga nada abiertamente ignorante en el proceso. Por ejemplo, digamos que usted envía el mensaje de esta manera:
<div class="post"><?php echo htmlentities($myVar, ENT_QUOTES); ?></div> ...
Ya que todo se escapa, estarás bien, incluso si PHP o JavaScript está en $ myVar. Sin embargo, esto no se aplica si decides hacer algo como esto:
<script><?php echo htmlentities($myVar, ENT_QUOTES); ?></script>
Porque es un modo válido para la codificación de JavaScript, y daría como resultado la ejecución del script. De manera similar, PHP normalmente no se ejecuta solo porque se ejecuta en escapes de PHP dentro de una cadena, por lo que htmlentities no causa ningún daño, a menos que decida:
<?php eval($myVar); ?>
La prevención de XSS no solo consiste en escapar de la salida, se trata de saber cuándo para escapar de la salida, y en qué contextos puede ser peligroso. Nunca debe emitir una entrada de usuario dentro de una secuencia de comandos, estilo, base o etiqueta de enlace, y siempre debe desinfectar la entrada de usuario antes de colocarla en cualquier parte del cuerpo o etiqueta principal o cualquiera de sus elementos secundarios, y especialmente en los atributos , que es común cuando rellena previamente formularios (por ejemplo, para que puedan corregir una entrada no válida).
Incluso el sitio al que has vinculado contiene básicamente lo que acabo de decir, pero menos detallado:
La codificación de entidad HTML está bien para los datos que no son de confianza que colocó en el cuerpo del documento HTML, como dentro de una etiqueta. Incluso funciona para datos no confiables que se incorporan a los atributos, especialmente si eres religioso en cuanto al uso de citas en torno a tus atributos. Pero la codificación de entidad HTML no funciona si está colocando datos no confiables dentro de una etiqueta en cualquier lugar, o un atributo de controlador de eventos como onmouseover, dentro de CSS o en una URL. Por lo tanto, incluso si utiliza un método de codificación de entidad HTML en todas partes, lo más probable es que sea vulnerable a XSS. DEBE usar la sintaxis de escape para la parte del documento HTML en el que está colocando datos que no son de confianza. De eso se tratan las reglas a continuación.