Rumah > pembangunan bahagian belakang > Tutorial Python > Tingkatkan keselamatan projek Django anda dengan `Cache-Control` pada paparan yang betul

Tingkatkan keselamatan projek Django anda dengan `Cache-Control` pada paparan yang betul

Susan Sarandon
Lepaskan: 2025-01-19 18:10:09
asal
312 orang telah melayarinya

Boost your Django projects

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan