Ommaviy forma yuborishlarini xususiy tarmoqqa qanday import qilish kerak
Bitta ommaviy forma yuborishini qabul yozuvidan xususiy importergacha kuzatib boring va tekshirish, hisob ma'lumotlari hamda qayta urinishlarni to'g'ri tomonda saqlang.
Xususiy tarmoq bilan hech qachon gaplashmaydigan ommaviy forma ham xususiy tarmoq baholashi kerak bo'lgan ma'lumotlarni ishlab chiqaradi. Tunnel faqat kim kimga qo'ng'iroq qilishini o'zgartiradi. Yuklab olingandan keyingi hamma narsa import qarori va u xususiy tomonga tegishli. Bu qo'llanma bitta yuborishni brauzerdan qayd etilgan ichki yozuvgacha kuzatadi.
Yuborish tushadigan joydan boshlang
Brauzer ommaviy so'nggi nuqtaga yuboradi, u nazorat qilinadigan qabul omboriga bir qator yozadi va tasdiqdan boshqa hech narsa qaytarmaydi. O'sha ombor topshirish nuqtasi bo'lib, ommaviy qatlam yoza oladigan yagona narsa shu bo'lishi kerak. Xom ma'lumotni u yerda o'zgartirmasdan, kelgan vaqti va barqaror yozuv identifikatori bilan birga saqlang.
Keyin xususiy ishchi tunnel orqali kutayotgan qatorlarni tortib oladi va har biri bilan nima qilishni hal qiladi. U o'z identifikatori ostida ishlaydi va bu keyingi bo'limning mavzusi.
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
Importerga faqat kerakli vakolatni bering
Ommaviy veb jarayon va ichki ilovaga yozadigan identifikator ikki xil sub'ekt bo'lishi kerak. Ommaviy serverga faqat forma ma'lumotlarini yetkazishi kerakligi uchun ichki boshqaruv kerak emas, ikki tomon uchun bitta umumiy hisob esa har qanday veb xatoni ichki yozuvga aylantiradi. Ishchiga o'z hisob ma'lumotlarini bering, ularni bitta import amali bilan cheklang va har bir importni qaysi sub'ekt bajarganini qayd eting. Aynan shu ajratish tunnel chegarasini bezak emas, mazmunli qiladi.
Ishchi qaysi manbadan o'qishi mumkinligini ham cheklang. Agar amalga oshirish navbat yoki uzatish xizmatidan foydalansa, o'sha xizmat o'z autentifikatsiyasi va kirish siyosatini saqlaydi, chunki VPN yuk ichidagi hech narsani autentifikatsiya qilmaydi.
Qisqa muddatli funksiya ham xuddi shu ko'rikdan ozod emas. U ishlayotganda tarmoqdagi o'rni va hisob ma'lumotlari hali ham vakolat beradi, qisqaroq umr esa faqat oynani toraytiradi. Umr identifikatsiya qanday amallarni bajarishi mumkinligini hal qilishning o'rnini bosmaydi.
Ichkarida biror narsa o'zgarishidan oldin tekshiring
Ommaviy forma maydonlari aksi isbotlanmaguncha hujumchi nazorat qiladigan matn, va OWASP ning kiritishni tekshirish bo'yicha yo'riqnomasi aynan shu sababdan backend oqimlarini ishonchsiz manbalar qatoriga qo'shadi. Shifrlangan uzatish baytlar buzilmasdan yetib kelganini bildiradi, ular ruxsat etilgan so'rovni tasvirlashini emas. Har qanday imtiyozli qadamdan oldin tahlil qiling va tekshiring, shunda yomon qator harakat qila oladigan kod yo'liga hech qachon yetib bormaydi.
Ruxsat etilgan maydonlar, ularning formatlari, o'lchamlari va bajarilishi kerak bo'lgan biznes qoidalarini belgilang. Sana to'g'ri shakllangan bo'lishi mumkin, ammo so'ralgan amal uchun noto'g'ri bo'lishi mumkin, va ichki hisob yoki tasdiqlash holatini nomlaydigan yuk o'ziga ularning hech birini bera olmasligi kerak.
Rad etilgan qatorlarni tuzatishni taxmin qilish o'rniga ko'rib chiqish natijasiga yuboring yoki ularni shell yoki xom ma'lumotlar bazasi interfeysiga o'tkazmang. Yozuv identifikatori va bajarilmagan qoidani qayd eting, arizachi kiritgan har bir maydonni emas.
Bitta amalda qayta urinish nuqtasini yarating
Agar submission-1042 yozuvi birinchi tasdiq yo'qolgani uchun ikki marta tortilsa, ishchiga manba yozuvini va uning qayd etilgan natijasini tanib olishning barqaror usuli kerak. Ishni bir marta ishga tushiradigan jadval har bir qator bir marta qo'llanilganini isbotlamaydi. Ikki marta yetkazish odatiy hol, shuning uchun dizayn uni qabul qilishi kerak.
Ichki ilovaning o'z tranzaksiyasi va dublikatlarni qayta ishlash mexanizmidan foydalaning, manba identifikatori, natija va tasdiqni bitta izchil ketma-ketlikda saqlang. Faqat mo'ljallangan amal qayd etilgandan yoki barqaror tarzda tayinlangandan keyin tasdiqlang va baytlar yuklab olingani uchun qabul qatorini hech qachon o'chirmang.
Keyin buni uchta qat'iy sinov ma'lumoti bilan isbotlang: haqiqiy qator, noto'g'ri shakllangan qator va o'sha nazorat qilinadigan manba identifikatori ikki marta yetkazilgan holat. Har biri ishchi ishlatadigan o'sha so'nggi nuqtadan o'tadi.
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
Birinchi ikki qator turli ichki holatlarda tugashi kerak, uchinchisi esa ikkinchisini yaratish o'rniga o'sha manba yozuvi uchun allaqachon qayd etilgan identifikatorni qaytarishi kerak. Boshqa har qanday natija import hali takrorlanadigan emasligini bildiradi.