Javni obrazac koji nikada ne razgovara sa privatnom mrežom ipak proizvodi podatke koje privatna mreža mora procijeniti. Tunel menja samo to ko koga poziva. Sve posle preuzimanja je odluka o uvozu i pripada privatnoj strani. Ovaj vodič prati jednu prijavu od pregledača do zabeleženog internog zapisa.

Počnite tamo gde prijava sleće

Pregledač šalje na javnu krajnju tačku, koja upisuje red u kontrolisano skladište prijema i ne vraća ništa više od potvrde. To skladište je tačka predaje i trebalo bi da bude jedino u šta javni sloj može da upisuje. Držite sirovi sadržaj tamo nepromenjen, zajedno sa vremenom dolaska i stabilnim identifikatorom zapisa.

Zatim privatni radnik povlači redove na čekanju kroz tunel i odlučuje šta će sa svakim. Radi pod sopstvenim identitetom, a to je tema sledećeg odeljka.

curl --silent --fail \
  --cert /etc/importer/client.crt --key /etc/importer/client.key \
  "https://intake.corp.internal/api/pending?limit=20" \
  -o /var/lib/importer/pending.json

Dajte uvozniku samo ovlašćenja koja su mu potrebna

Javni veb proces i identitet koji upisuje u internu aplikaciju trebalo bi da budu dva različita subjekta. Javnom serveru nije potrebna interna administracija samo zato što mora da dostavi podatke obrasca, a jedan deljeni nalog za obe strane pretvara svaku veb grešku u interni upis. Izdajte radniku sopstvene akreditive, ograničite ih na jednu operaciju uvoza i beležite koji je subjekt izvršio svaki uvoz. To razdvajanje čini granicu tunela smislenom, a ne ukrasnom.

Ograničite i iz kog izvora radnik može da čita. Ako implementacija koristi red ili servis za prenos, taj servis zadržava sopstvenu autentifikaciju i politiku pristupa, jer VPN ne autentifikuje ništa unutar sadržaja.

Funkcija kratkog trajanja nije izuzeta od istog pregleda. Dok radi, njen mrežni položaj i akreditive i dalje daju ovlašćenja, a kraći životni vek samo sužava prozor. Životni vek nije zamena za odluku o tome koje operacije identitet može da izvrši.

Validirajte pre nego što se bilo šta interno promeni

Polja javnog obrasca su tekst pod kontrolom napadača dok se ne dokaže suprotno, i OWASP smernice za validaciju unosa upravo zbog toga svrstavaju backend tokove među nepouzdane izvore. Šifrovan prenos kaže da su bajtovi stigli neoštećeni, a ne da opisuju dozvoljen zahtev. Parsirajte i validirajte pre svakog privilegovanog koraka, tako da loš red nikada ne stigne do putanje koda koja može da deluje.

Definišite dozvoljena polja, njihove formate, veličine i poslovna pravila koja moraju da važe. Datum može biti ispravno formatiran i ipak pogrešan za traženu operaciju, a sadržaj koji imenuje interni nalog ili status odobrenja ne sme sebi moći da dodeli ni jedno ni drugo.

Odbijene redove šaljite u rezultat pregleda umesto da nagađate ispravku ili ih prosleđujete u školjku ili sirovi interfejs baze podataka. Beležite identifikator zapisa i pravilo koje nije prošlo, a ne svako polje koje je podnosilac otkucao.

Napravite tačku ponovnog pokušaja na jednoj operaciji

Ako se zapis submission-1042 povuče dvaput jer je prva potvrda izgubljena, radniku je potreban trajan način da prepozna izvorni zapis i njegov zabeležen rezultat. Raspored koji posao pokrene jednom ne dokazuje da je svaki red primenjen jednom. Dupla dostava je normalna, pa dizajn mora da je apsorbuje.

Koristite sopstvenu transakciju i mehanizam za obradu duplikata interne aplikacije i držite identifikator izvora, rezultat i potvrdu u jednom koherentnom nizu. Potvrdite tek kada je nameravana operacija zabeležena ili trajno dodeljena i nikada ne brišite red prijema samo zato što su bajtovi preuzeti.

Zatim to dokažite sa tri fiksirana primera: ispravan red, pogrešno formatiran red i isti kontrolisani identifikator izvora dostavljen dvaput. Svaki od njih prolazi kroz istu krajnju tačku koju radnik koristi.

for f in fixtures/valid-submission.json fixtures/bad-date.json; do
  curl --silent --fail --cert /etc/importer/client.crt \
    -X POST --data @"$f" https://intake.corp.internal/api/records
done
curl --silent --fail --cert /etc/importer/client.crt \
  -X POST --data @fixtures/valid-submission.json https://intake.corp.internal/api/records

Prva dva reda moraju da završe u različitim internim stanjima, a treći mora da vrati identifikator koji je već zabeležen za taj izvorni zapis umesto da stvori drugi. Bilo šta drugo znači da uvoz još nije ponovljiv.

Povezani članci