Hoe om openbare vormindienings in 'n privaat netwerk in te voer
Volg een openbare vormindiening van die ontvangsrekord tot by die private invoerder, en hou validering, geloofsbriewe en herprobering aan die regte kant.
'n Openbare vorm wat nooit met die privaat netwerk praat nie, lewer steeds data wat die privaat netwerk moet beoordeel. Die tonnel verander net wie wie skakel. Alles ná die aflaai is 'n invoerbesluit, en dit hoort aan die private kant. Hierdie deurloop volg een indiening van die blaaier tot 'n vasgelê interne rekord.
Begin waar die indiening beland
Die blaaier plaas na 'n openbare eindpunt, wat 'n ry in 'n beheerde ontvangsstoor skryf en niks meer as 'n erkenning terugstuur nie. Daardie stoor is die oorhandigingspunt, en dit moet die enigste ding wees wat die openbare vlak kan skryf. Hou die rou vrag daar onveranderd, saam met die tyd wat dit aangekom het en 'n stabiele rekordidentifiseerder.
'n Private werker trek dan hangende rye deur die tonnel en besluit wat om met elkeen te doen. Dit loop onder sy eie identiteit, wat die onderwerp van die volgende afdeling is.
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
Gee die invoerder net die gesag wat dit nodig het
Die openbare webproses en die identiteit wat in die interne toepassing skryf, moet twee verskillende prinsipale wees. 'n Openbare bediener het geen interne administrasie nodig net omdat dit vormdata moet aflewer nie, en 'n enkele gedeelde rekening vir beide kante maak enige webfout 'n interne skryf. Gee die werker sy eie geloofsbrief, beperk dit tot die een invoerbewerking, en teken aan watter prinsipaal elke invoer gedoen het. Daardie skeiding is wat die tonnelgrens betekenisvol maak eerder as dekoratief.
Beperk ook van watter bron die werker mag lees. As die implementering 'n tou of 'n oordragdiens gebruik, hou daardie diens sy eie verifiëring en toegangsbeleid, want die VPN verifieer niks binne die vrag nie.
'n Kortstondige funksie is nie van dieselfde hersiening vrygestel nie. Terwyl dit loop, verleen sy netwerkposisie en sy geloofsbriewe steeds gesag, en 'n korter lewensduur vernou net die venster. Lewensduur is nie 'n plaasvervanger vir die besluit watter bewerkings die identiteit mag uitvoer nie.
Valideer voordat enigiets intern verander
Openbare vormvelde bly deur 'n aanvaller beheerde teks tot die teendeel bewys is, en OWASP se riglyne vir invoervalidasi reken back-end-voerstrome juis om daardie rede onder onbetroubare bronne. 'n Geënkripteerde oordrag sê die grepe het ongeskonde aangekom, nie dat hulle 'n toelaatbare versoek beskryf nie. Ontleed en valideer voor enige bevoorregte stap, sodat 'n slegte ry nooit 'n koppad bereik wat kan handel nie.
Bepaal die toegelate velde, hulle formate, hulle groottes en die besigheidsreëls wat moet geld. 'n Datum kan goed gevorm wees en tog verkeerd wees vir die bewerking wat versoek word, en 'n vrag wat 'n interne rekening of 'n goedkeuringsstatus noem, mag nie vir homself een van die twee kan toeken nie.
Stuur verwerpte rye na 'n hersieningsuitkoms eerder as om 'n regstelling te raai of hulle na 'n dop of 'n rou databasiskoppelvlak aan te stuur. Teken die rekordidentifiseerder en die mislukte reël aan, nie elke veld wat die aansoeker getik het nie.
Maak 'n herprobeerpunt by een bewerking
As rekord submission-1042 twee keer getrek word omdat die eerste erkenning verlore gegaan het, het die werker 'n duursame manier nodig om die bronrekord en sy vasgelê resultaat te herken. 'n Skedule wat die werk een keer laat loop, bewys nie dat elke ry een keer toegepas is nie. Dubbele aflewering is normaal, so die ontwerp moet dit absorbeer.
Gebruik die interne toepassing se eie transaksie- en duplikaathanteringsmeganisme, en hou die bronidentifiseerder, die uitkoms en die erkenning in een samehangende volgorde. Erken eers nadat die beoogde bewerking vasgelê of duursaam toegewys is, en moenie die ontvangsry net omdat die grepe afgelaai is, verwyder nie.
Bewys dit dan met drie toestelle: 'n geldige ry, 'n wanvormige ry, en dieselfde beheerde bronidentifiseerder wat twee keer afgelewer word. Elkeen gaan deur dieselfde eindpunt wat die werker gebruik.
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
Die eerste twee rye moet in verskillende interne toestande eindig, en die derde moet die identifiseerder teruggee wat reeds vir daardie bronrekord vasgelê is, eerder as om 'n tweede een te skep. Enigiets anders beteken die invoer is nog nie herhaalbaar nie.