astroklient: własna nazwa produktu zamiast odziedziczonej po rdzeniu #85

Merged
gitea merged 1 commits from fix/nazwa-produktu into master 2026-08-27 15:08:36 +00:00
Owner

Astroklient przedstawiał się na stronie głównej jako „astrololo" — w tytule karty i w nagłówku.

To najpoważniejszy z możliwych śladów. Mówi klientowi wprost, że trzyma okrojoną wersję czegoś większego, i podaje frazę, po której da się wyszukać, czego mu nie dano. Cała reszta izolacji przestaje mieć znaczenie, gdy produkt sam się przedstawia nazwą rodzica.

astrodemo nie było dotknięte — ma własne kopie szablonów i pokazuje „astrodemo". Sprawdziłem, bo pytałeś.

Skąd się wzięło

Nazwa była wpisana na sztywno w szablony, a szablony są wspólne — dokładnie ta sama przyczyna, co przy zaszytym w base.html warunku na administratora. Mieszka teraz w module produkt.py, który nakładka produktu nadpisuje; szablony o nią pytają, zamiast ją znać.

Drugie źródło, mniej oczywiste

Nazwa siedziała też w identyfikatorach JavaScriptu, które widzi każdy, kto otworzy narzędzia deweloperskie:

  • zdarzenie astrololo:coords
  • klucz astrololo.form.v1 w localStorage

Przemianowane na neutralne kosmogram:*. Te identyfikatory nie mają powodu nosić nazwy rodziny produktów.

⚠️ Skutek uboczny: zmiana klucza w localStorage kasuje raz zapamiętane wersje robocze formularza. Jednorazowo, u wszystkich.

Sprawdzone, że NIE wyciekają

trop werdykt
nagłówki X-Astrololo-* jadą wyłącznie między warstwami, nie do przeglądarki
tytuł aplikacji FastAPI /docs, /openapi.json, /redoc404, także zalogowanemu
nazwy loggerów, HKDF, content-type wewnętrzne, nie docierają do klienta

Test rozdziela dwie rzeczy

Nazwie rdzenia wolno występować w identyfikatorach wewnętrznych (loggery, materiał do wyprowadzania kluczy, nagłówki międzywarstwowe) i nie wolno w szablonach, zasobach ani w treści odpowiedzi.

Zakaz na wszystko byłby albo obejściem przez zmianę nazw kluczy kryptograficznych, albo martwą regułą wyłączaną przy pierwszej okazji.

Sprawdzony w obie strony: po cofnięciu nakładki test pada.

Testy: astroklient 15 · presentation 368 · astrodemo 28 · logic 342 · data 42 · render 41.

Astroklient przedstawiał się na stronie głównej jako **„astrololo"** — w tytule karty i w nagłówku. To najpoważniejszy z możliwych śladów. Mówi klientowi wprost, że trzyma okrojoną wersję czegoś większego, i podaje frazę, po której da się wyszukać, czego mu nie dano. Cała reszta izolacji przestaje mieć znaczenie, gdy produkt sam się przedstawia nazwą rodzica. **astrodemo nie było dotknięte** — ma własne kopie szablonów i pokazuje „astrodemo". Sprawdziłem, bo pytałeś. ## Skąd się wzięło Nazwa była wpisana na sztywno w szablony, a szablony są **wspólne** — dokładnie ta sama przyczyna, co przy zaszytym w `base.html` warunku na administratora. Mieszka teraz w module `produkt.py`, który nakładka produktu nadpisuje; szablony o nią pytają, zamiast ją znać. ## Drugie źródło, mniej oczywiste Nazwa siedziała też w **identyfikatorach JavaScriptu**, które widzi każdy, kto otworzy narzędzia deweloperskie: - zdarzenie `astrololo:coords` - klucz `astrololo.form.v1` w `localStorage` Przemianowane na neutralne `kosmogram:*`. Te identyfikatory nie mają powodu nosić nazwy rodziny produktów. ⚠️ **Skutek uboczny:** zmiana klucza w `localStorage` kasuje raz zapamiętane wersje robocze formularza. Jednorazowo, u wszystkich. ## Sprawdzone, że NIE wyciekają | trop | werdykt | |---|---| | nagłówki `X-Astrololo-*` | jadą wyłącznie między warstwami, nie do przeglądarki | | tytuł aplikacji FastAPI | `/docs`, `/openapi.json`, `/redoc` → **404**, także zalogowanemu | | nazwy loggerów, HKDF, content-type | wewnętrzne, nie docierają do klienta | ## Test rozdziela dwie rzeczy Nazwie rdzenia **wolno** występować w identyfikatorach wewnętrznych (loggery, materiał do wyprowadzania kluczy, nagłówki międzywarstwowe) i **nie wolno** w szablonach, zasobach ani w treści odpowiedzi. Zakaz na wszystko byłby albo obejściem przez zmianę nazw kluczy kryptograficznych, albo martwą regułą wyłączaną przy pierwszej okazji. Sprawdzony w obie strony: po cofnięciu nakładki test pada. **Testy:** astroklient 15 · presentation 368 · astrodemo 28 · logic 342 · data 42 · render 41.
gitea added 1 commit 2026-08-27 14:37:04 +00:00
astroklient: własna nazwa produktu zamiast odziedziczonej po rdzeniu
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m20s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (pull_request) Successful in 9m26s
Testy / Testy astrodemo (pull_request) Successful in 9m25s
Testy / Testy astroklient (pull_request) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 6s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 5s
build / build (push) Successful in 12s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 10m21s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (push) Successful in 9m25s
Testy / Testy astrodemo (push) Successful in 9m25s
Testy / Testy astroklient (push) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 6s
Testy / Kontrola składni wszystkich warstw (push) Successful in 4s
338ec24e90
Astroklient przedstawiał się na stronie głównej jako „astrololo" — w tytule
karty i w nagłówku. To najpoważniejszy z możliwych śladów: mówi klientowi
wprost, że trzyma okrojoną wersję czegoś większego, i podaje frazę, po której da
się wyszukać, czego mu nie dano. Cała reszta izolacji przestaje mieć znaczenie,
gdy produkt sam się przedstawia nazwą rodzica.

Wzięło się stąd, że nazwa była wpisana na sztywno w szablony, a szablony są
WSPÓLNE — dokładnie ta sama przyczyna, co przy zaszytym w base.html warunku na
administratora. Nazwa mieszka teraz w module `produkt.py`, który nakładka
produktu nadpisuje; szablony o nią pytają, zamiast ją znać.

astrodemo NIE było dotknięte: ma własne kopie szablonów i pokazuje „astrodemo".

DRUGIE ŹRÓDŁO WYCIEKU, mniej oczywiste: nazwa siedziała też w identyfikatorach
JavaScriptu, które widzi każdy, kto otworzy narzędzia deweloperskie — zdarzenie
`astrololo:coords` i klucz `astrololo.form.v1` w localStorage. Przemianowane na
neutralne `kosmogram:*`; te identyfikatory nie mają powodu nosić nazwy rodziny
produktów. SKUTEK UBOCZNY: zmiana klucza w localStorage kasuje raz zapamiętane
wersje robocze formularza.

Sprawdzone, że NIE wyciekają: nagłówki X-Astrololo-* jadą wyłącznie między
warstwami, a dokumentacja OpenAPI (gdzie zostaje tytuł aplikacji FastAPI) oddaje
404 także zalogowanemu.

TEST rozdziela to, co widzi człowiek, od identyfikatorów wewnętrznych. Nazwa
rdzenia wolno występować w nazwach loggerów, materiale do wyprowadzania kluczy
i nagłówkach międzywarstwowych; nie wolno w szablonach, zasobach ani w treści
odpowiedzi. Zakaz na wszystko byłby albo obejściem przez zmianę nazw kluczy
kryptograficznych, albo martwą regułą wyłączaną przy pierwszej okazji.

Sprawdzony w obie strony: po cofnięciu nakładki test pada.

Testy: astroklient 15, presentation 368, astrodemo 28, logic 342, data 42,
render 41.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gitea merged commit 338ec24e90 into master 2026-08-27 15:08:36 +00:00
gitea deleted branch fix/nazwa-produktu 2026-08-27 15:08:36 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/astrololo#85