Notas de lanzamiento de Django 1.7.7

18 de marzo de 2015

Django 1.7.7 soluciona varios problemas y cuestiones de seguridad en la versión 1.7.6.

Posibilidad de denegación de servicio con strip_tags()

El año pasado strip_tags() se cambió para trabajar iterativamente. El problema es que el tamaño del input que está procesando puede aumentar en cada iteración lo que resulta en un bucle infinito en strip_tags(). Este problema solo afecta versiones de Python que no han recibido una corrección de bug en HTMLParser; es decir, Python < 2.7.7 y 3.3.5. Algunos proveedores de sistemas operativos también han backportado la corrección del bug de Python a sus paquetes de versiones anteriores.

Para remediar este problema, strip_tags() ahora devolverá el input original si detecta que el largo de la cadena que está procesando aumenta. Recuerda que NO se proporciona ninguna garantía absoluta sobre los resultados de strip_tags() siendo seguro para HTML. Por lo tanto, NUNCA marques como seguro el resultado de una llamada a strip_tags() sin escaparla primero, por ejemplo con escape().

Mitigado posible ataque XSS mediante URLs de redirección proporcionadas por el usuario

Django se basa en la entrada del usuario en algunos casos (por ejemplo, django.contrib.auth.views.login() y i18n) para redirigir al usuario a una URL de «éxito». Las comprobaciones de seguridad para estas redirecciones (es decir, django.utils.http.is_safe_url()) aceptaban URLs con caracteres de control en la parte delantera y consideraban URLs como \x08javascript:... seguras. Este problema no afecta a Django actualmente, ya que solo ponemos esta URL en el encabezado de respuesta Location y los navegadores parecen ignorar JavaScript allí. Los navegadores que hemos probado también tratan las URLs prefijadas con caracteres de control como por ejemplo %08//example.com como rutas relativas, por lo que la redirección a un objetivo no seguro no es un problema.

Sin embargo, si un desarrollador se basa en is_safe_url() para proporcionar objetivos de redirección seguros y coloca tal URL en una etiqueta href, podría sufrir un ataque XSS ya que algunos navegadores como Google Chrome ignoran caracteres de control al principio de una URL en una etiqueta href.

Bugfixes

  • Se ha corregido el problema de renombrar clases en migraciones, donde renombrar una subclase provocaría un estado incorrecto para objetos que referencia a la superclase (#24354).

  • Se ha detenido la escritura de archivos de migración en modo «dry run» cuando se resuelven conflictos de migración. Cuando se llama makemigrations --merge con verbosity=3, el archivo de migración se escribe a stdout (#24427).