Podijeljeni poddomeni, dva ulaza: ko vidi koje zapise?
Poddomen bira brendiranje, a potvrđeno članstvo bira podatke. Pokrenite iste provjere zakupca bez obzira dolazi li zahtjev s uredske adrese ili preko VPN-a.
Klinika A i Klinika B dijele jednu kodnu bazu, dvije poddomene i mješavinu posjetilaca iz ureda i putem VPN-a. Mrežni timovi obično odvojeno konfigurišu dva ulaza, i to je u redu, dok god aplikacija to ne čini. Provjere ispod pripadaju aplikaciji i moraju se ponašati jednako bez obzira na to kroz koja su vrata zahtjev ušao.
Prvo: naziv hosta imenuje samo zakupca
Razriješite traženi naziv hosta prema mapiranju koje održava administrator i odbijte sve nepoznato. Koristite provjerenu vrijednost hosta iz okvira umjesto sirovog zaglavlja, da kovan Host ne bi mogao ubaciti ključ za pretragu. Uspješno podudaranje kaže kodu koju konfiguraciju zakupca i koje brendiranje učitati. Ono ne govori ništa o tome može li pozivalac vidjeti podatke tog zakupca. Drugo pitanje držite u zasebnoj funkciji sa zasebnim ulazom.
Zajednička pomoćna funkcija koja iz jednog traženja naziva hosta vraća i kontekst i dopuštenje početak je greške.
Drugo: članstvo dolazi iz sesije
Potražite aktivna članstva autentificiranog korisnika i uporedite ih sa zakupcem iz prve provjere. Korisnik koji pripada obama klinikama može prelaziti, ali prelazak mora biti izričita radnja zabilježena u kontekstu zahtjeva, a ne zaključak iz URL-a. Korisniku koji pripada jednoj klinici i traži drugu pristup se odbija, uključujući preuzimanja i API pozive.
Testirajte negativan slučaj tako što ćete izmijeniti identifikator zapisa i parametar zakupca. Ako bilo koja izmjena vrati podatke, opseg se čita iz zahtjeva, a ne iz potvrđenog članstva.
Opseg kolačića i jedinstvena prijava odlučuju gdje se račun može predstaviti. Oni ne odlučuju šta taj račun smije čitati.
Treće: mreža ne dokazuje ništa o osobi
VPN prolaz autentificira tunel, a javni spisak dozvola autentificira raspon adresa. Niti jedno ne identificira osobu. NAT sabija mnogo korisnika u jednu izvornu adresu, a uredski raspon čini isto za sve u zgradi. Tretirajte oboje kao transportne činjenice i držite autorizaciju u aplikaciji ili u integraciji koja izričito tvrdi identitet i kao takva se pregleda.
DNS je treća transportna činjenica. Privatan odgovor traži privatnu rutu, a javni frontend traži podržanu putanju do izvora. Nijedno od njih ne nosi dopuštenje.
Jedna rečenica za zid: mreža odlučuje kako zahtjev stiže, a aplikacija odlučuje šta smije čitati.
Četvrto: pokrenite matricu na oba ulaza
Koristite kontrolisane račune da provjerite A na A, B na B, A na B, nepoznat naziv hosta i autentificiran račun bez članstava. Četvrti i peti moraju pasti zatvoreno i nikada se ne smiju vratiti na zakupca kao zadano. Pokrenite istu matricu i kroz VPN ulaz, s jednom teglom sesije po računu:
curl -s -o /dev/null -w '%{http_code}' -b jar.txt https://clinic-b.example.com/records/42
curl -s -o /dev/null -w '%{http_code}' -b jar.txt https://clinic-a.example.com/records/42
Zatim promijenite unos na spisku dozvola i pokrenite ponovo. Rezultat koji se pomjeri znači da mrežna kontrola donosi odluku o autorizaciji.
Ponovite matricu nakon svake promjene frontenda, jer drugi put kroz kod koji preskače provjeru najčešći je način na koji se ova granica erodira. Očekivani rezultat je dosadan: svaki ulaz daje iste odgovore.