Caching dengan ketara meningkatkan prestasi aplikasi Django, tetapi melindungi data sensitif adalah yang terpenting. Artikel ini menunjukkan cara mengurus Kawalan Cache dalam paparan Django dengan berkesan, menghalang maklumat sensitif daripada dicache. Ini penting untuk halaman seperti skrin log masuk atau halaman yang memaparkan butiran khusus pengguna.
Kepentingan Kawalan Cache
Konfigurasi cache yang tidak betul mendedahkan data sensitif kepada risiko keselamatan. Tanpa tetapan yang betul, maklumat ini boleh disimpan dalam penyemak imbas pengguna atau proksi perantara, mewujudkan kelemahan.
Melaksanakan Kawalan Cache dalam Django
Penghias @never_cache
, seperti yang didokumenkan dalam dokumentasi rasmi Django, menghalang paparan berasaskan fungsi daripada dicache:
<code class="language-python">from django.views.decorators.cache import never_cache @never_cache def my_secure_view(request): # Secure view logic here return HttpResponse("This page is protected from caching!")</code>
Untuk kebolehgunaan semula yang dipertingkatkan merentas pelbagai paparan berasaskan kelas, campuran tersuai menyediakan penyelesaian yang lebih bersih:
<code class="language-python"># myproject/views.py from django.contrib.auth.mixins import LoginRequiredMixin from django.utils.decorators import method_decorator from django.views.decorators.cache import never_cache @method_decorator(never_cache, name="dispatch") class PrivateAreaMixin(LoginRequiredMixin): """Extends LoginRequiredMixin with Cache-Control directives."""</code>
Campuran ini memudahkan mendapatkan pandangan berasaskan kelas:
<code class="language-python"># myapp/views.py from django.views.generic import TemplateView from myproject.views import PrivateAreaMixin class IndexView(PrivateAreaMixin, TemplateView): """Example index view.""" template_name = "index.html"</code>
Ujian Teliti untuk Keselamatan Teguh
Ujian komprehensif adalah penting untuk mengesahkan kefungsian PrivateAreaMixin
. Contoh berikut menunjukkan suite ujian yang mantap:
<code class="language-python"># myproject/tests/test_views.py from django.test import TestCase, RequestFactory from django.contrib.auth.models import AnonymousUser from django.contrib.auth import get_user_model from django.http import HttpResponse from django.views import View from myproject.views import PrivateAreaMixin class PrivateAreaMixinTest(TestCase): """Tests the PrivateAreaMixin's Cache-Control implementation.""" factory = RequestFactory() @classmethod def setUpTestData(cls): cls.user = get_user_model().objects.create_user( username="testuser", email="user@test.xyz", password="5tr0ngP4ssW0rd", ) def test_login_required_with_cache_control(self): class AView(PrivateAreaMixin, View): def get(self, request, *args, **kwargs): return HttpResponse() view = AView.as_view() # Test redirection for unauthenticated users request = self.factory.get("/") request.user = AnonymousUser() response = view(request) self.assertEqual(response.status_code, 302) self.assertEqual("/accounts/login/?next=/", response.url) # Test authenticated user and Cache-Control headers request = self.factory.get("/") request.user = self.user response = view(request) self.assertEqual(response.status_code, 200) self.assertIn("Cache-Control", response.headers) self.assertEqual( response.headers["Cache-Control"], "max-age=0, no-cache, no-store, must-revalidate, private", )</code>
Amalan Terbaik
Menggabungkan @never_cache
dengan campuran boleh guna semula seperti PrivateAreaMixin
menghasilkan kod yang bersih dan boleh diselenggara. Ditambah dengan ujian yang ketat, pendekatan ini memastikan pandangan sensitif adalah selamat dan mematuhi amalan terbaik. Bagaimanakah anda menangani caching dan data sensitif dalam projek Django anda?
Atas ialah kandungan terperinci Tingkatkan keselamatan projek Django anda dengan `Cache-Control` pada paparan yang betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!