Esto depende del contexto. Supongo que está utilizando la función htmlentities() , lo que en general sería seguro. Hace más o menos exactamente lo mismo que htmlspecialchars() .
Ambos protegen contra el XSS general y previenen el XSS basado en eventos cuando el parámetro saneado se inyecta en una etiqueta HTML.
Ambos no evitan los ataques javascript: , lo que puede ocurrir si se inyecta el valor del parámetro en un enlace, iframe u otra etiqueta similar. Si inyecta un src o href de cualquiera de las etiquetas, recomendaría primero eliminar cualquier espacio en blanco del parámetro y luego verificar ambos javascript: y data: .
javascript:alert(0) le dará una alerta cuando se inyecte en un enlace o iframe.
data:text/javascript:alert(0) hará lo mismo.
data:text/html:<script>alert(0);</script> hace lo mismo también, y omite strip_tags .
El motivo de la primera eliminación de espacios en blanco es evitar que un atacante suelte un carácter de salto de línea / CRLF en medio de su carga útil, por lo que PHP lo lee como que no es javascript: o data: al bloquear la carga útil, pero todavía se ejecutará como javascript lo ignorará.
Espero que explique qué tipo de ataques son posibles, es muy fácil afirmar que htmlentities() y htmlspecialchars() son una solución única para el problema, pero dependiendo de la situación, eso puede ser extremadamente peligroso. consejos.