Avalik vorm, mis ei räägi kunagi privaatvõrguga, toodab ikkagi andmeid, mida privaatvõrk peab hindama. Tunnel muudab ainult seda, kes keda kutsub. Kõik pärast allalaadimist on impordiotsus ja kuulub privaatsele poolele. See ülevaade jälgib üht esildist brauserist kinnitatud sisemise kirjeni.

Alustage sealt, kuhu esildis maandub

Brauser postitab avalikku lõpp-punkti, mis kirjutab rea kontrollitud vastuvõtuhoidlasse ega tagasta midagi muud kui kinnituse. See hoidla on üleandmispunkt ja peaks olema ainus, kuhu avalik kiht saab kirjutada. Hoidke toorandmed seal muutumatuna koos saabumisaja ja püsiva kirje identifikaatoriga.

Seejärel tõmbab privaatne töötleja tunnelist ootel read ja otsustab, mida igaühega teha. See töötab oma identiteedi all, millest räägib järgmine jaotis.

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

Andke importijale ainult vajalik volitus

Avalik veebiprotsess ja identiteet, mis kirjutab sisemisesse rakendusse, peaksid olema kaks erinevat subjekti. Avalik server ei vaja sisemist haldust ainult seetõttu, et peab vormiandmeid kohale toimetama, ja üks jagatud konto mõlema poole jaoks muudab iga veebivea sisemiseks kirjutuseks. Andke töötlejale oma volitus, piirake see ühe imporditoiminguga ja registreerige, milline subjekt iga impordi tegi. Just see eraldus teeb tunnelipiiri tähenduslikuks, mitte dekoratiivseks.

Piirake ka seda, millisest allikast töötleja lugeda tohib. Kui teostus kasutab järjekorda või ülekandeteenust, säilitab see teenus oma autentimise ja juurdepääsupoliitika, sest VPN ei autenti midagi lasti sees.

Lühiajaline funktsioon ei ole samast ülevaatusest vabastatud. Töötamise ajal annavad selle võrgupositsioon ja volitused endiselt õigusi ning lühem eluiga ainult kitsendab akent. Eluiga ei asenda otsust selle üle, milliseid toiminguid identiteet teha tohib.

Valideerige enne, kui midagi sisemist muutub

Avalike vormide väljad on ründaja juhitud tekst, kuni vastupidine on tõestatud, ja OWASPi sisendi valideerimise juhised loevad taustavood just sel põhjusel ebausaldusväärsete allikate hulka. Krüpteeritud ülekanne ütleb, et baidid saabusid terviklikult, mitte et need kirjeldavad lubatud päringut. Parsige ja valideerige enne iga privilegeeritud sammu, et halb rida ei jõuaks kunagi kooditeeni, mis suudab tegutseda.

Määratlege lubatud väljad, nende vormingud, suurused ja äriloogika reeglid, mis peavad kehtima. Kuupäev võib olla korrektselt vormistatud ja ikkagi taotletava toimingu jaoks vale, ning last, mis nimetab sisemist kontot või kinnitusolekut, ei tohi suuta endale kumbagi anda.

Saatke tagasilükatud read ülevaatuse tulemusse, selle asemel et parandust aimata või need shelli või toore andmebaasiliidese juurde edasi saata. Logige kirje identifikaator ja ebaõnnestunud reegel, mitte iga väli, mille taotleja sisestas.

Tehke korduspunkt ühel toimingul

Kui kirje submission-1042 tõmmatakse kaks korda, sest esimene kinnitus läks kaotsi, vajab töötleja püsivat viisi lähtekirje ja selle kinnitatud tulemuse äratundmiseks. Ajastus, mis käivitab töö üks kord, ei tõesta, et iga rida rakendati üks kord. Duubelkohaletoimetamine on tavaline, seega peab disain selle vastu võtma.

Kasutage sisemise rakenduse enda tehingute ja duplikaatide käsitlemise mehhanismi ning hoidke lähteidentifikaator, tulemus ja kinnitus ühes sidusas järjestuses. Kinnitage alles pärast seda, kui kavatsetud toiming on kinnitatud või püsivalt määratud, ja ärge kunagi kustutage vastuvõtureast ainult seetõttu, et baidid alla laaditi.

Tõestage seda seejärel kolme testfailiga: kehtiv rida, rikutud rida ja sama kontrollitud lähteidentifikaator kaks korda toimetatuna. Igaüks neist läbib sama lõpp-punkti, mida töötleja kasutab.

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

Kaks esimest rida peavad lõppema erinevates sisemistes olekutes ja kolmas peab tagastama selle lähtekirje jaoks juba kinnitatud identifikaatori, mitte looma teist. Mis tahes muu tähendab, et import ei ole veel korratav.

Seotud artiklid