Я использую локаторы потоков для хранения текущего пользователя и запроса объектов. Таким образом, я могу легко получить доступ к запросу из любой точки программы (например, динамические формы) без необходимости передавать их.
Чтобы реализовать хранилище локаторов потоков в промежуточном программном обеспечении, я последовал за учебником на сайте Django: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=18
Этот документ с тех пор был изменен, чтобы предложить избегать этой техники: http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser?version=20
Из статьи:
С точки зрения дизайна, threadlocals являются по существу глобальными переменными и подчиняются всем обычным проблемам переносимости и предсказуемости, которые обычно влекут за собой глобальные переменные.
Что еще более важно, с точки зрения безопасности, threadlocals представляют огромный риск. Предоставляя хранилище данных, которое предоставляет состояние других потоков, вы предоставляете возможность одному потоку вашего веб-сервера потенциально изменять состояние другого потока в системе. Если данные threadlocal содержат описания пользователей или другие данные, связанные с проверкой подлинности, эти данные могут использоваться в качестве основы для атаки, которая предоставляет доступ к неавторизованному пользователю или предоставляет личные данные пользователя. Несмотря на то, что существует возможность создания системы threadlocal, которая безопасна от такого рода атак, гораздо легче защищаться и создавать систему, которая не подвержена такой уязвимости в первую очередь.
Я понимаю, почему глобальные переменные могут быть плохими, но в этом случае я запускаю свой собственный код на своем собственном сервере, поэтому я не вижу, какую опасность представляют две глобальные переменные.
Может кто-нибудь объяснить проблему безопасности? Я попросил многих людей, как они будут взломать мое приложение, если они прочитают эту статью и знают, что я использую локаторы потоков, но никто не смог мне сказать. Я начинаю подозревать, что это мнение придерживается разборчивых пуристов, которые любят передавать объекты явно.