Estoy usando subprocesos locales para almacenar el usuario actual y solicitar objetos. De esta forma, puedo acceder fácilmente a la solicitud desde cualquier parte del programa (por ejemplo, formularios dinámicos) sin tener que pasarlos por alto.¿Por qué es malo usar locales de subprocesos en Django?
Para implementar el almacenamiento de los locales de rosca en un middleware, he seguido un tutorial en el sitio Django: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=18
Este documento ya ha sido modificado para sugerir evitar esta técnica: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=20
Desde el artículo :
Desde el punto de vista del diseño, los threadlocals son variables esencialmente globales, y están sujetos a todos los problemas habituales de portabilidad y predictabi lidad que generalmente implican las variables globales.
Más importante aún, desde el punto de vista de la seguridad, los hilos de rosca representan un gran riesgo. Al proporcionar un almacén de datos que expone el estado de otros hilos, proporciona una forma de que un hilo en su servidor web modifique potencialmente el estado de otro hilo en el sistema. Si los datos locales de thread contienen descripciones de usuarios u otros datos relacionados con la autenticación, esos datos podrían usarse como base para un ataque que otorgue acceso a un usuario no autorizado o exponer detalles privados de un usuario. Si bien es posible construir un sistema threadlocal que esté a salvo de este tipo de ataque, es mucho más fácil estar a la defensiva y construir un sistema que no esté sujeto a tal vulnerabilidad en primer lugar.
Entiendo por qué las variables globales pueden ser malas, pero en este caso estoy ejecutando mi propio código en mi propio servidor, por lo que no puedo ver el peligro que representan dos variables globales.
¿Alguien puede explicar el problema de seguridad involucrado? Le he preguntado a muchas personas cómo podrían hackear mi aplicación si leen este artículo y saben que estoy usando conversaciones locales, sin embargo, nadie ha podido decirme. Estoy empezando a sospechar que esta es una opinión sostenida por los puristas que dividen el cabello que adoran pasar los objetos explícitamente.
Por cierto - ¿tienes el ejemplo original? Se borró ahora y quiero usar eso ... – rslite
Este fragmento es bastante similar a la página eliminada: http://djangosnippets.org/snippets/2179/ – hekevintran
Middleware GlobalRequest: https://djangosnippets.org/snippets/2853 –