Recientemente me uní a una compañía con una aplicación PHP de más de un millón de líneas de código. El enfoque de seguridad de XSS parece ser filtrar la salida cada vez que el desarrollador lo piensa. No es sorprendente que no hayan captado todo, y tenemos algunas oportunidades XSS realmente increíbles.
En una vida pasada, he usado el enfoque defensores de Rasmus : filter
all input para que sea seguro XSS, y no se preocupe por la visualización. Este enfoque funcionó bien: la mayoría de los datos funcionan perfectamente la mayor parte del tiempo, y el código que usa filter(UNSAFE_RAW)
no está exactamente prohibido, pero seguramente recibe mayor atención en las revisiones de código.
El problema que tengo es: ¿cómo migras de un enfoque a otro? Parece que ahora tendré que codificar todo el contenido de la base de datos y jugar a whack-a-mole para eliminar todos los nuevos errores de doble codificación que descubriré. (Debería ser un pequeño más fácil ya que puedo grep para la existencia de htmlspecialchars()
pero no puedo grep para su ausencia .: ))
Una respuesta realmente útil podría ser un blog sobre un proyecto exitoso o incluso una autopsia.