J'utilise des locals de thread pour stocker l'utilisateur actuel et demander des objets. De cette façon, je peux avoir un accès facile à la demande de n'importe où dans le programme (par exemple des formulaires dynamiques) sans avoir à les transmettre.Pourquoi l'utilisation des locales de thread dans Django est-elle mauvaise?
Pour mettre en œuvre le stockage fil de la population locale dans un middleware, j'ai suivi un tutoriel sur le site Django: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=18
Ce document a depuis été modifié pour suggérer d'éviter cette technique: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=20
De l'article D'un point de vue de la conception, les threadlocals sont essentiellement des variables globales, et sont soumis à tous les problèmes habituels de portabilité et de prédiction. que les variables globales impliquent généralement.
Plus important encore, d'un point de vue sécurité, les threadlocals représentent un risque énorme. En fournissant un magasin de données qui expose l'état des autres threads, vous fournissez à un thread de votre serveur Web un moyen de modifier potentiellement l'état d'un autre thread dans le système. Si les données threadlocal contiennent des descriptions d'utilisateurs ou d'autres données liées à l'authentification, ces données peuvent être utilisées comme base d'une attaque qui accorde l'accès à un utilisateur non autorisé ou expose les détails privés d'un utilisateur. Bien qu'il soit possible de construire un système threadlocal qui soit à l'abri de ce type d'attaque, il est beaucoup plus facile d'être sur la défensive et de construire un système qui n'est pas sujet à une telle vulnérabilité en premier lieu. Je comprends pourquoi les variables globales peuvent être mauvaises, mais dans ce cas, je cours mon propre code sur mon propre serveur, donc je ne vois pas quel danger deux variables globales posent. Est-ce que quelqu'un peut expliquer le problème de sécurité en cause? J'ai demandé à beaucoup de gens comment ils pourraient pirater mon application s'ils lisaient cet article et savent que j'utilise des sections locales, mais personne n'a été capable de me le dire. Je commence à soupçonner qu'il s'agit d'un avis tenu par des puristes qui se dédoublent les cheveux et qui aiment transmettre des objets de manière explicite.
Par ailleurs - avez-vous l'exemple original? Il est supprimé maintenant et je veux l'utiliser ... – rslite
Cet extrait est assez similaire à la page supprimée: http://djangosnippets.org/snippets/2179/ – hekevintran
Middleware GlobalRequest: https://djangosnippets.org/snippets/2853 –