Ինչպես ներմուծել հանրային ձևաթղթերի ներկայացումները մասնավոր ցանց
Հետևեք մեկ հանրային ձևաթղթի ներկայացմանը՝ ընդունման գրառումից մինչև մասնավոր ներմուծիչ, և պահեք վավերացումը, հավատարմագրերը և կրկնափորձերը ճիշտ կողմում։
Հանրային ձևաթուղթը, որը երբեք չի խոսում մասնավոր ցանցի հետ, այնուամենայնիվ ստեղծում է տվյալներ, որոնք մասնավոր ցանցը պետք է գնահատի։ Թունելը փոխում է միայն այն, թե ով ում է զանգում։ Ներբեռնումից հետո ամեն ինչ ներմուծման որոշում է և պատկանում է մասնավոր կողմին։ Այս շրջայցը հետևում է մեկ ներկայացման՝ դիտարկիչից մինչև հաստատված ներքին գրառում։
Սկսեք այնտեղ, որտեղ վայրէջք է կատարում ներկայացումը
Դիտարկիչը հրապարակում է հանրային վերջնակետում, որը տող է գրում վերահսկվող ընդունման պահոցում և ոչինչ ավելի չի վերադարձնում, քան հաստատում։ Այդ պահոցը հանձնման կետն է, և այն պետք է լինի միակը, որտեղ հանրային շերտը կարող է գրել։ Պահեք հում բեռն այնտեղ անփոփոխ՝ ժամանման ժամանակի և կայուն գրառման նույնացուցիչի հետ միասին։
Այնուհետև մասնավոր աշխատողը թունելով քաշում է սպասող տողերը և որոշում, թե ինչ անել յուրաքանչյուրի հետ։ Այն աշխատում է իր ինքնության ներքո, ինչն էլ հաջորդ բաժնի թեման է։
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
Տվեք ներմուծիչին միայն այն լիազորությունը, որն անհրաժեշտ է
Հանրային վեբ գործընթացը և ներքին հավելվածում գրող ինքնությունը պետք է լինեն երկու տարբեր սուբյեկտներ։ Հանրային սերվերին ներքին կառավարում պետք չէ միայն այն պատճառով, որ այն պետք է հասցնի ձևաթղթի տվյալները, և երկու կողմերի համար մեկ ընդհանուր հաշիվը ցանկացած վեբ սխալ դարձնում է ներքին գրառում։ Տրամադրեք աշխատողին իր սեփական հավատարմագրերը, սահմանափակեք դրանք ներմուծման այդ մեկ գործողությամբ և գրանցեք, թե որ սուբյեկտն է կատարել յուրաքանչյուր ներմուծում։ Հենց այդ բաժանումն է թունելի սահմանը դարձնում իմաստալից, ոչ թե դեկորատիվ։
Սահմանափակեք նաև, թե որ աղբյուրից աշխատողը կարող է կարդալ։ Եթե իրականացումն օգտագործում է հերթ կամ փոխանցման ծառայություն, այդ ծառայությունը պահպանում է իր սեփական նույնականացումն ու մուտքի քաղաքականությունը, քանի որ VPN-ը ոչինչ չի նույնականացնում բեռի ներսում։
Կարճատև գործող ֆունկցիան նույն ստուգումից ազատված չէ։ Քանի դեռ այն աշխատում է, նրա ցանցային դիրքը և հավատարմագրերը դեռ լիազորություն են տալիս, և ավելի կարճ կյանքը միայն նեղացնում է պատուհանը։ Կյանքի տևողությունը չի փոխարինում այն որոշմանը, թե ինքնությունը որ գործողություններ կարող է կատարել։
Վավերացրեք, նախքան ներքին որևէ բան կփոխվի
Հանրային ձևաթղթերի դաշտերը հարձակվողի կողմից վերահսկվող տեքստ են, քանի դեռ հակառակը ապացուցված չէ, և OWASP-ի մուտքային տվյալների վավերացման ուղեցույցը հենց այդ պատճառով է backend հոսքերը համարում անվստահելի աղբյուրներ։ Գաղտնագրված փոխանցումը ասում է, որ բայթերը հասել են անվնաս, ոչ թե որ դրանք նկարագրում են թույլատրելի հարցում։ Վերլուծեք և վավերացրեք ցանկացած արտոնյալ քայլից առաջ, որպեսզի վատ տողը երբեք չհասնի գործել կարող կոդի ուղի։
Սահմանեք թույլատրված դաշտերը, դրանց ձևաչափերը, չափերը և այն գործարար կանոնները, որոնք պետք է պահպանվեն։ Ամսաթիվը կարող է ճիշտ ձևավորված լինել և այնուամենայնիվ սխալ լինել պահանջվող գործողության համար, և ներքին հաշիվ կամ հաստատման կարգավիճակ նշող բեռը չպետք է կարողանա իրեն տալ դրանցից ոչ մեկը։
Մերժված տողերը ուղարկեք վերանայման արդյունքի, փոխարենը ուղղում գուշակելու կամ դրանք shell կամ հում տվյալների բազայի ինտերֆեյս փոխանցելու։ Գրանցեք գրառման նույնացուցիչը և ձախողված կանոնը, ոչ թե դիմողի մուտքագրած յուրաքանչյուր դաշտ։
Կրկնափորձի կետ սարքեք մեկ գործողության վրա
Եթե submission-1042 գրառումը քաշվում է երկու անգամ, որովհետև առաջին հաստատումը կորել է, աշխատողին պետք է կայուն եղանակ՝ ճանաչելու աղբյուր գրառումը և դրա հաստատված արդյունքը։ Ժամանակացույցը, որն աշխատանքը կատարում է մեկ անգամ, չի ապացուցում, որ յուրաքանչյուր տող մեկ անգամ կիրառվել է։ Կրկնակի առաքումը սովորական է, ուստի նախագիծը պետք է կլանի այն։
Օգտագործեք ներքին հավելվածի սեփական գործարքների և կրկնօրինակների կառավարման մեխանիզմը, և պահեք աղբյուրի նույնացուցիչը, արդյունքը և հաստատումը մեկ հետևողական հաջորդականության մեջ։ Հաստատեք միայն այն բանից հետո, երբ նախատեսված գործողությունը հաստատված կամ կայուն կերպով հանձնված է, և երբեք մի ջնջեք ընդունման տողը միայն այն պատճառով, որ բայթերը ներբեռնվել են։
Ապա ապացուցեք դա երեք փորձնական ֆայլով՝ վավեր տող, աղավաղված տող և նույն վերահսկվող աղբյուրի նույնացուցիչը՝ երկու անգամ առաքված։ Յուրաքանչյուրը անցնում է նույն վերջնակետով, որն օգտագործում է աշխատողը։
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
Առաջին երկու տողերը պետք է ավարտվեն տարբեր ներքին վիճակներում, իսկ երրորդը պետք է վերադարձնի այն նույնացուցիչը, որն արդեն հաստատված է այդ աղբյուր գրառման համար, փոխարենը երկրորդ ստեղծելու։ Ցանկացած այլ բան նշանակում է, որ ներմուծումը դեռ կրկնելի չէ։