Namų darbas — įrodyk plokščią srautą, užkabink ribą
Augina programą. Pridėk įkėlimą į savo programą, jei jos sritis turi failų — kitaip daryk tai su SignFlow.
-
Įrodyk, kad srautas plokščias. Sukurk didelį failą —
head -c 20000000 /dev/urandom > big.bin(20 MB). Įkelk jį stebėdamas atmintį (top, arba Goruntime.ReadMemStats, užrašytą prieš ir po). Rezidentinis dydis nepašoka 20 MB — nesio.MultiWriterniekada nelaiko failo, jis srautu teka. Dabar įsivaizduok naiviąio.ReadAllversiją ir ką dešimt lygiagrečių įkėlimų jai padarytų. -
Užkabink ribą. Įkelk failą kiek virš 25 MiB (
head -c 27000000 /dev/urandom > toobig.bin). Patvirtink, kad atsakymas yra 413,uploads/nieko negavo, odocumentslentelė nepakitusi. Tada perskaitykhttp.MaxBytesReaderdokumentaciją: ką ji daro, pasiekus ribą, ir kodėl tai teisingas elgesys serveriui? -
Atakuok raktą (popieriuje).
safePathatmeta bet kokį raktą, kuris nėra 32 šešioliktainiai ženklai. Tarkim, pašalinai tą patikrą ir užpuolikas gali nustatytistorage_keyį../../main.go. Atsek, ką tuomet nuskaitytųOpen. Parašyk vieną sakinį, kodėl tikrinti raktą — ne failo vardą — yra teisinga apsaugos vieta. -
Patikrink vientisumą ranka. Paimk įkeltą failą ir paleisk
sha256sumoriginalui. Palygink sufile_hashstulpeliu — jie sutampa. Pakeisk vieną originalo baitą, sumaišyk vėl: visiškai kitokia. Būtent ta savybė, kuria vėliau rems parašas, todėl maišą verta saugoti įkėlimo metu.
Kita pamoka paverčia šį sąrašą tikru paviršiumi: dokumento peržiūra, atsisiuntimas ir juodraščio trynimas — su autorizacija, užtikrinta pačioje SQL, ne if sakiniu po nuskaitymo.