Zamiana jednego kliknięcia w tymczasową regułę zapory jest wygodna, a jednocześnie buduje system autoryzacji, który decyduje, kto może dotrzeć do usługi. Wydaje on adres, a nie osobę, i ta różnica ma znaczenie w chwili, gdy dwie osoby dzielą jeden NAT. Ogranicz zakres zgody, potwierdź ją świadomie i nadaj wygaśnięciu znaczenie, zanim link zostanie zbudowany. Decyzja przed tobą dotyczy tego, gdzie postawić granicę, a nie tego, czy w ogóle ma ona istnieć.

Zdecyduj, na jakie pytanie odpowiada zgoda

Zacznij od wymagania. Jeśli wskazana osoba ma dotrzeć do usługi, a aplikacja już uwierzytelnia tę osobę, uwierzytelniona brama utrzymuje tożsamość w punkcie egzekwowania i wcale nie potrzebuje dopuszczenia adresu. Jeśli celem jest agent budowania, administracyjny port przeskoku lub urządzenie, które nie może brać udziału w logowaniu użytkownika, wąsko zakreślona zgoda na adres może być jedyną praktyczną kontrolą.

Wybór dopuszczenia po adresie dla aplikacji skierowanej do użytkowników przenosi prawdziwy problem autoryzacji gdzie indziej, a portal dziedziczy wtedy winę za lukę, której nigdy nie zamknął.

Ogranicz żądanie na serwerze

Przeglądarka nie może wybierać celu, portu ani prefiksu. Portal ustala usługę z własnych rejestrów i sprawdza uprawnienie testem po stronie serwera, co jest tą samą zasadą, którą wytyczne OWASP dotyczące autoryzacji stosują do każdego żądania. Wyprowadzenie adresu również należy do chronionej granicy: gdy odwrotne proxy zgłasza adres klienta, akceptuj tylko skonfigurowany łańcuch proxy i jego udokumentowane postępowanie z nagłówkami. Nagłówek przekazywania dostarczony przez odwiedzającego jest twierdzeniem o pochodzeniu, a nie jego dowodem.

Następnie sprawdź, czy portal i usługa widzą to samo źródło. Podzielony tunel, jeden przeskok proxy i IPv4 wobec IPv6 mogą dać dwóm celom dwa różne adresy, więc zgoda aktywowana jedną ścieżką może nie obejmować następnego żądania.

Pokaż zgodę, zanim ją zainstalujesz

Otwarcie linku powinno pokazać proponowaną usługę, zaobserwowane źródło i czas trwania, a jeszcze niczego nie zmieniać. Ten jeden krok zamienia link z wiadomości e-mail z działania w propozycję i powstrzymuje bota podglądu lub skaner poczty przed udzieleniem dostępu tylko przez jego pobranie.

Potwierdzenie powinno być żądaniem zmieniającym stan, z typowymi zabezpieczeniami przed witrynami krzyżowymi i pochodzeniem. Token powinien być jednorazowy i zużyty atomowo w chwili instalowania reguły, a rekord powinien zapisywać właściciela, usługę, adres, identyfikator zgody i wygaśnięcie, bez nigdy nie logując surowego tokenu.

Dostarczenie tokenu zasługuje na taką samą staranność jak sama reguła. Wygasły lub już zużyty link, który nadal tworzy regułę, to drugie drzwi założone tym samym kluczem.

Adres jest współdzielony nawet wtedy, gdy zgoda żyje

NAT biurowy, NAT operatora i współdzielone wyjście VPN każde stawiają kilka osób za jednym adresem. Dopuszczenie tego adresu dopuszcza wszystkich za nim — jeśli chodzi o następną granicę usługi —, nie dowodząc niczego o tym, kto ma konto, którego oczekuje usługa.

Usunięcie reguły też nie jest uniwersalnym rozłączeniem. Ustanowione połączenia, tokeny aplikacji w pamięci podręcznej i długotrwałe sesje mogą przetrwać regułę o minuty lub znacznie dłużej, więc wybrany czas życia powinien odzwierciedlać to, co usługa robi po dopuszczeniu, a nie tylko jak długo istnieje reguła.

Przetestuj cztery przypadki i obie rodziny adresów

Zgoda jest warta tyle, ile cztery przypadki, które przetrwa: nowe dozwolone żądanie, niezatwierdzony wnioskodawca, powtórzenie tego samego linku i to samo żądanie po wygaśnięciu.

Następnie przetestuj każdą rodzinę osobno, ponieważ adres źródłowy obserwowany przez usługę może się między nimi różnić.

dig +short A service.example.com
dig +short AAAA service.example.com
curl -4 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
curl -6 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com

Użytecznym wynikiem jest tymczasowa, audytowalna decyzja o dopuszczeniu pod normalną autoryzacją użytkownika, a nie stałe otwarcie noszące imię tego, kto kliknął pierwszy.

Powiązane artykuły