feat(browse): cache stron autor/jednostka/zrodlo/uczelnia przez @csrf_exempt (2.1)#650
Merged
Merged
Conversation
…_exempt
Strony przeglądania autora (wysoki ruch), jednostki, źródła i uczelni
były wykluczone z cache_publiczny, bo renderowały bezwarunkowy
{% csrf_token %} w formularzu „szukaj publikacji", a bezpiecznik
_ZAWIERA_CSRF odmawia zapisu każdej odpowiedzi z „csrf" w treści.
Zamiast endpointu tokenowego: BuildSearch dostaje @csrf_exempt (jego
jedyny efekt uboczny to zapis wyszukiwania do WŁASNEJ sesji
requestującego — brak uprzywilejowanej akcji, patrz docstring), a
{% csrf_token %} znika z 8 formularzy w 4 szablonach browse. Dzięki
temu treść nie niesie już sekretu i wchodzi do współdzielonego cache'a.
Bezpiecznik _ZAWIERA_CSRF zostaje jako defense-in-depth. Cztery widoki
DetailView dostają @method_decorator(cache_publiczny()).
Testy (LocMemCache, nie DummyCache): 4 strony faktycznie się cache'ują
(MISS→HIT), POST na build_search bez tokenu nie zwraca 403 (302),
oraz izolacja multi-host strony autora (brak wycieku między uczelniami).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
PR #633 wykluczył z cache'owania strony
browse/autor,jednostka,zrodlo,uczelnia— bo renderują bezwarunkowy{% csrf_token %}w formularzu „szukajpublikacji", a strażnik
_ZAWIERA_CSRFodmawia cache'owania odpowiedzi z tokenem.Strona autora ma wysoki ruch (poz. 2.1 audytu).
Zmiana — @csrf_exempt zamiast endpointu tokenowego
BuildSearch(widok przyjmujący formularz) dostaje@csrf_exempt, token usuniętyz formularzy w 4 szablonach, strony dodane do
cache_publiczny().Dlaczego bezpieczne:
BuildSearch.post()zapisuje WYŁĄCZNIE do sesjirequestującego (wartość =
json.dumps, konsumowana przezjson.loads+recreate_form— bezpickle/eval; tytuł przeznh3.clean), po czym redirect.Zero uprzywilejowanej akcji, zero mutacji wspólnego stanu. Najgorszy skutek
CSRF-ataku = podsunięcie ofierze wyszukiwania w jej sesji — bez szkody. Ta sama
funkcja jest i tak publiczna (API). Kierunek endpointu tokenowego świadomie
odrzucony.
CSRF_COOKIE_HTTPONLY = TrueNIETKNIĘTE.Weryfikacja
request.get_host()jawnie w kluczu cache;test dowodzi obcy host = MISS, brak wycieku między uczelniami.
enforce_csrf_checks=True).open-redirect/XSS). Token zdjęty z dokładnie 8 właściwych formularzy, żaden inny
stanowy formularz nie rozbrojony. Strażnik
_ZAWIERA_CSRFzostawiony jakodefense-in-depth.
Uwaga: zmiana dotyka
@csrf_exemptna publicznym widoku — zasługuje na/security-reviewprzed mergem (wektory zweryfikowane już w review, ale tomechanizm bezpieczeństwa).
Poz. 2.1 audytu.
🤖 Generated with Claude Code
https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX