Hoe't jo iepenbiere formulierynsendingen yn in privee-netwurk ymportearje
Folgje ien iepenbiere formulierynsending fan it ûntfangstrekôr oant de privee-ymporteur, en hâld falidaasje, oanmeldgegevens en werpogingen oan de goede kant.
In iepenbier formulier dat nea mei it privee-netwurk praat, produsearret dochs gegevens dy't it privee-netwurk beoardielje moat. De tunnel feroaret allinnich wa't wa opbelt. Alles nei it downloaden is in ymportbeslút, en dat heart by de privee kant. Dizze rûnlieding folget ien ynsending fan de browser oant in fêstlein yntern rekôr.
Begjin wêr't de ynsending lânet
De browser pleatst nei in iepenbier einpunt, dat in rige yn in kontrolearre ûntfangstopslach skriuwt en neat mear as in befêstiging weromstjoert. Dy opslach is it oerjaanpunt, en it moat it iennichste wêze dêr't de iepenbiere laach yn skriuwe kin. Hâld de rauwe lading dêr ûnferoare, tegearre mei de tiid fan oankomst en in stabile rekôr-identifikaasje.
Dêrnei lûkt in privee wurker wachtsjende rigen troch de tunnel en beslút wat der mei elk bart. Hy draait ûnder syn eigen identiteit, en dat is it ûnderwerp fan de folgjende paragraaf.
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
Jou de ymporteur allinnich it foech dat er nedich hat
It iepenbiere webproses en de identiteit dy't yn de ynterne applikaasje skriuwt, moatte twa ferskillende haadpersoanen wêze. In iepenbiere server hat gjin ynterne administraasje nedich allinnich om't er formuliergegevens leverje moat, en ien dield akkount foar beide kanten makket fan elke webfout in ynterne skriuwerij. Jou de wurker syn eigen oanmeldgegevens, behein se ta dy iene ymportoperaasje, en registrearje wa't elke ymport die. Krekt dy skieding makket de tunnelgrins betsjuttingsfol en net fersierend.
Behein ek fan hokker boarne de wurker lêze mei. As de útfiering in wachtrige of in oerdrachtstsjinst brûkt, hâldt dy tsjinst syn eigen autentikaasje en tagongsbelied, want de VPN autentisearret neat yn de lading.
In koartbesteande funksje is net fan deselde beoardieling frijsteld. Wylst er draait, jouwe syn netwurkposysje en syn oanmeldgegevens noch altyd foech, en in koartere libbensdoer ferhellet allinnich it finster. Libbensdoer ferfangt net it beslút hokker operaasjes de identiteit dwaan mei.
Falidearje foardat der wat yntern feroaret
Fjilden fan iepenbiere formulieren binne tekst ûnder kontrôle fan de oanfaller oant it tsjinoerstelde bewiisd is, en de Owasp-riglynen foar falidaasje fan ynfier rekkenje backend-streamen krekt dêrom ta de net fertroude boarnen. In fersifere oerdracht seit dat de bytes ûnskansearre oankamen, net dat se in tastien fersyk beskriuwe. Parsearje en falidearje foar elke befoarrjochte stap, sadat in minne rige nea in kodepaad berikt dat hannelje kin.
Definiearje de tastiene fjilden, har formaten, har grutten en de saaklike regels dy't jilde moatte. In datum kin goed foarme wêze en dochs ferkeard wêze foar de frege operaasje, en in lading dy't in yntern akkount of in goedkarringstatus neamt, mei himsels gjin fan beide jaan kinne.
Stjoer ôfwiisde rigen nei in beoardielingsresultaat ynstee fan in korreksje te rieden of se troch te stjoeren nei in skulp as in rauwe databankynterface. Registrearje de rekôr-identifikaasje en de mislearre regel, net elk fjild dat de oanfreger typt hat.
Meitsje in werpogingspunt by ien operaasje
As rekôr submission-1042 twa kear lutsen wurdt om't de earste befêstiging ferlern gien is, hat de wurker in duorjende manier nedich om it boarnerekôr en syn fêstleine resultaat te erkennen. In skema dat it wurk ien kear draait, bewiist net dat elke rige ien kear tapast is. Dûbele levering is normaal, dus it ûntwerp moat it opnimme.
Brûk it eigen transaksje- en duplikaatôfhannelingsmeganisme fan de ynterne applikaasje, en hâld de boarne-identifikaasje, it resultaat en de befêstiging yn ien gearhingjende folchoarder. Befêstigje pas neidat de bedoelde operaasje fêstlein of duorjend tawiisd is, en wiskje de ûntfangstrige nea allinnich om't de bytes downloade binne.
Bewiis it dan mei trije testbestannen: in jildige rige, in misfoarme rige en deselde kontrolearre boarne-identifikaasje twa kear levere. Elk giet troch itselde einpunt dat de wurker brûkt.
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
De earste twa rigen moatte yn ferskillende ynterne tastannen einigje, en de tredde moat de identifikaasje weromjaan dy't al foar dat boarnerekôr fêstlein is, ynstee fan in twadde te meitsjen. Alles oars betsjut dat de ymport noch net werhelber is.