スレッドローカルを使用して、現在のユーザーとリクエストオブジェクトを保存しています。このようにして、プログラムのどこからでも(動的フォームなど)リクエストに簡単にアクセスできます。リクエストを渡す必要はありません。
ミドルウェアにスレッドローカルストレージを実装するために、Djangoサイトのチュートリアルに従いました: https ://web.archive.org/web/20091128195932/http://code.djangoproject.com:80 / wiki / CookBookThreadlocalsAndUser
その後、このドキュメントは、この手法を回避することを提案するように変更されました: https ://web.archive.org/web/20110504132459/http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
記事から:
設計の観点から、スレッドローカルは本質的にグローバル変数であり、グローバル変数が通常伴う移植性と予測可能性のすべての通常の問題の影響を受けます。
さらに重要なことに、セキュリティの観点から、スレッドローカルは大きなリスクをもたらします。他のスレッドの状態を公開するデータストアを提供することにより、Webサーバー内の1つのスレッドが、システム内の別のスレッドの状態を変更する可能性がある方法を提供します。スレッドローカルデータにユーザーの説明やその他の認証関連データが含まれている場合、そのデータは、許可されていないユーザーへのアクセスを許可したり、ユーザーの個人情報を公開したりする攻撃の基礎として使用される可能性があります。この種の攻撃から安全なスレッドローカルシステムを構築することは可能ですが、防御的であり、そもそもそのような脆弱性の影響を受けないシステムを構築する方がはるかに簡単です。
グローバル変数が悪い理由は理解できますが、この場合、自分のサーバーで自分のコードを実行しているため、2つのグローバル変数がどのような危険をもたらすのかわかりません。
誰かが関連するセキュリティの問題を説明できますか?この記事を読んで、私がスレッドローカルを使用していることを知っている場合、多くの人に私のアプリケーションをハッキングする方法を尋ねましたが、誰も私に言うことができませんでした。私は、これがオブジェクトを明示的に渡すことを愛する髪を分割する純粋主義者によって保持された意見であると疑うようになり始めています。