martes, 27 de noviembre de 2007

Lista de permitidos vs Lista de prohibidos

Al momento de pensar en seguridad, validación y filtrado de datos, tenemos dos opciones: o decidimos que permitimos o que prohibimos.

Por un lado, se puede usar un filtro para evitar ataques XSS que se base en buscar una expresion regular buscando código javascript (ya sea etiquetas script o atributos onload, onclick, onmouseover...). Esto sería usar "blacklist" es decir, poner código que no se puede usar.

Por otro lado, se puede permitir etiquetas HTML del tipo b, i, u... y todas las otras etiquetas simplemente eliminarlas. Esto sería "whitelist", o sea, limitar al usuario en lo que sí puede hacer.

¿Cuál es preferible?

Al utlizar una "blacklist" uno tiene que pensar en todos los posibles "ataques" que pueda recibir. Esto es un riesgo, ya que si a nuestro atacante se le ocurre un método que a nosotros no se nos ocurrió, estaríamos en un grave problema. Pero, si en cambio, utilizamos un sistema de "whitelist", el usuario sólo podría acceder si cumple con nuestro patrón permitido, cuestión que sería mucho menos probable que pueda concretar un ataque.

La desventaja, por otro lado, de la whitelist, es que podemos filtrar o no permitir información que es, realmente, válida.

Entonces, con una blacklist tenemos mayor posibilidad de ser víctimas de ataques por parte de usuarios malintencionados, mientras que utilizando una whitelist podemos dejar a usuarios correctos sin la posibilidad de ingresar datos.

Personalmente, la segunda opción me parece la mejor, ya que sus consecuencias son menos severas.

1 comentario:

Anónimo dijo...

Sebastián, me gustaría saber ¿cómo hiciste la doble versión en inglés y en castellano? gracias
pd: de php, sé poco, de momento.