Ćwiczenia

Laboratorium: logowanie, reset i pamięć przeglądarki

W tym serwisie wystarczy przycisk „Uruchom laboratorium” powyżej. Instrukcja uruchomienia przez terminal poniżej dotyczy osobnej pracy na źródłowych plikach ćwiczenia.

Samowystarczalna lokalna symulacja w JavaScript. Serwer dostarcza plik, lecz nie uwierzytelnia użytkownika, nie zapisuje kont i nie wysyła poczty. Cookie i klucz są jawne, modyfikowalne i nie zapewniają ochrony. Nie używaj danych prawdziwego konta. Kod jest ćwiczeniem diagnostyki, nie implementacją produkcyjnej sesji.

Uruchomienie

W katalogu projektu uruchom node tools/serwer-lekcji.cjs, chyba że serwer już działa. Otwórz http://127.0.0.1:8787/content/cwiczenia/sesja-demo/lab.html. Plik laboratorium otwieraj przez lokalny HTTP, nie przez file://. Potrzebujesz współczesnej przeglądarki z włączoną pamięcią witryny.

Kliknij „Resetuj ćwiczenie”. Reset usuwa wyłącznie cookie i klucze prefiksu qa_session_demo_. Nie czyści całej pamięci originu. Odśwież inne otwarte karty, ponieważ stan zmiennych i sessionStorage jest odrębny. Zegar testowy działa w bieżącej karcie; odświeżenie przywraca przesunięcie 0.

Specyfikacja

  • Jedno syntetyczne konto tester, początkowy jawny klucz demo-start. Klucz porównywany z uwzględnieniem wielkości liter.
  • Błędna nazwa albo klucz daje „Niepoprawne dane demo”, bez dostępu.
  • Udany login zapisuje cookie demo qa_session_demo_session i daje dostęp na 120 sekund. Wylogowanie powinno usunąć cookie i dostęp.
  • Prośba o reset dla dowolnej nazwy daje ten sam komunikat. Kod powstaje wyłącznie dla tester, jest widoczny w jawnej skrzynce testowej, ważny 60 sekund i jednorazowy.
  • Nowy klucz wybierasz z demo-nowy i demo-drugi. Zmiana usuwa cookie i wymaga ponownego loginu. Wybrany klucz jest przechowywany w sessionStorage tylko na potrzeby tej karty demo.
  • Zapamiętana nazwa i motyw są w localStorage; notatka w sessionStorage. Odświeżenie zachowuje oba magazyny, niezależna nowa karta tego samego originu ma wspólny motyw i pustą notatkę.
  • Cookie ustawiane przez JavaScript ma Path /content/cwiczenia/sesja-demo/ i SameSite=Lax; nie ma HttpOnly ani Secure. Termin until to własna reguła demo, nie data wygaśnięcia cookie. Nie dowodzi bezpieczeństwa prawdziwej sesji.

Zadanie

Sprawdź poprawny i błędny klucz, wielkość liter, logout z odświeżeniem, wygaśnięcie sesji, kod błędny/wygasły/użyty powtórnie oraz dane obu magazynów w dwóch kartach. Dla każdej próby zapisz stan startowy, kroki, wynik i wymaganie. Użyj checklisty. Podgląd pamięci odświeżaj przyciskiem; w drugiej karcie UI nie aktualizuje się automatycznie po zmianie motywu.

Rozwiązanie — trzy celowe defekty

  1. Po resecie tester / DEMO-START daje dostęp. Wymaganie rozróżnia wielkość liter, ale porównanie w kodzie sprowadza oba klucze do małych liter.
  2. Zaloguj się, kliknij „Wyloguj”, odśwież stronę i „Otwórz panel prywatny” przed upływem 120 s. Dostęp wraca. Logout zmienił napis w UI, lecz nie usunął cookie. Naprawa demo: wywołanie removeSession(); w prawdziwym systemie trzeba unieważnić również sesję po stronie serwera.
  3. Poproś o kod dla tester, skopiuj go, wybierz demo-nowy, zatwierdź, następnie wybierz demo-drugi i użyj tego samego kodu przed 60 s. Druga zmiana przechodzi. Naprawa demo: wyzerować token po pierwszym użyciu; w produkcie konsumpcja tokenu wymaga atomowej kontroli serwera.

Przesunięcie o 121 s poprawnie blokuje sesję oraz kod. Po zmianie klucza stary jest odrzucany, nowy przyjmowany. Zapisana notatka zostaje po reload tej karty; niezależna nowa karta ma pustą notatkę i wspólny motyw. To kontrolne wyniki poprawne, potrzebne do odróżnienia defektu od zamierzonej reguły.

Rzeczywista weryfikacja

2 października 2026: Playwright, headless Chromium 151.0.7922.34, lokalny HTTP port 8787. node tools/test-sesja.cjs zakończył się PASS: wszystkie trzy defekty odtworzone, błędne dane odrzucone, czas sesji i kodu sprawdzony, stare/nowe dane zweryfikowane, reload i niezależna karta sprawdzone. Brak błędów JavaScript oraz poziomego przepełnienia przy 360 px. Rzeczywisty zrzut widoku mobilnego jest dowodem z automatyzacji.

Nie testowano fizycznego telefonu, menedżera haseł, czytnika ekranu ani innych silników przeglądarek. Nie ma prawdziwego API, dostarczenia wiadomości, blokady nadużyć, MFA, TLS ani autoryzacji zasobów serwera. Są to ograniczenia modelu, a nie dodatkowe celowe defekty do odkrycia.

Powiązane lekcje: testowanie logowania i resetu, cookies i pamięć przeglądarki.