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.