No, ya que parece indicar que está utilizando jQuery (experto en analizar información de etiquetas HTML) para hacer una validación de entrada en el usuario que ingresa el HTML que luego mostrará al usuario. La lista blanca de etiquetas HTML seguras, y la de listas negras de etiquetas HTML inseguras es el método incorrecto para prevenir el XSS.
El método correcto es utilizar un lenguaje de marcado de peso ligero como Markdown o reStructuredText para que el usuario ingrese datos con formato (como publicaciones de blog) , comentarios, etc). De esta manera, el usuario puede estilizar su texto en lo que quiera, agregar texto en negrita o enlaces dentro de su comentario con una sintaxis como **make this bold**
o [text for a link](http://www.example.com/fake/link)
que siempre se convierte en html para que se muestre como <a href="http://www.example.com/fake/link">text for a link</a>
en el navegador del usuario. Esto le permite evitar completamente, por ejemplo, <script>
insertando archivos javascript, o onclick
onmouserover
form
con atributos de acción, ya que su lenguaje de marcado seguro limitado está configurado para no permitir esas etiquetas o atributos generales.
Por supuesto, debes configurar tu idioma para que esté en un safe_mode
donde los caracteres especiales específicamente <
, >
, &
, "
, '
se escapan en HTML (en <
, >
, &
"
y '
que el usuario verá como el carácter real sin que el navegador lo interprete como fuente HTML de la parte), los atributos ( attributes=false
) no pueden ser ingresado (por ejemplo, onclick
), además de requerir enlaces para comenzar con una lista blanca limitada; por ejemplo, http
, //
, /
, ftp
, mailto
, news
, así que no dejes que los usuarios ingresen javascript
como protocolo en sus enlaces.
(Esto también puede lograrse filtrando la entrada sin procesar a través del purificador de HTML, si desea que sus usuarios puedan escribir HTML directo como en la respuesta de Hendrik).
Al hacer esto con un lenguaje de marcado ligero y maduro, no se olvidará de eliminar algo sin importar qué tan oscuro es o cómo su biblioteca jQuery no detectó el HTML malformado mientras lo desinfectaba, pero sí lo hizo un navegador en particular. .