Praleistas čekis, kuris gali jums brangiai kainuoti: „Requests.get“ ir „Flask“ užklausos forma
Įsivaizduokite: jaunesnysis programuotojas dirba spaudžiamas, kad sukurtų funkciją. Jis atidaro „Flask“ programėlę, prideda naują maršrutą, paima užklausos parametrą ir dirba toliau.
Iš pirmo žvilgsnio šis „Flask“ užklausos panaudojimas atrodo tinkamas. Tačiau praleiskite tipas=int ir tu atveri duris injekcijų atakos. Tai yra tokios rizikos, kurios praslysta pro kodo peržiūras, nes „tai tik vertės gavimas“.
Kur slypi rizika FLask užklausa bei FLask užklausos forma
Abu flask.request bei flask.request.form yra nepatikimi įėjimo taškai. Kiekviena jų grąžinama reikšmė gaunama tiesiai iš kliento ir turėtų būti traktuojama kaip potencialiai pavojinga.
Nepavykus patvirtinti arba išvalyti šių duomenų, gali kilti kritinių saugumo problemų, įskaitant:
Ši rizika taikoma ne tik duomenų bazėms ar priekinio plano vaizdavimui; užpuolikai taip pat gali išnaudoti įvestis, naudojamas šablonuose arba perduodamas subprocesams.
Saugūs pseudokodo šablonai:
Prevencinis CI/CD vykdymo užtikrinimas:
Net jei sintaksė atrodo saugi, neapdorotų arba nepatikrintų reikšmių naudojimas šablonuose ar sistemos komandose gali tapti rimtu injekcijos vektoriumi.
Praktinis įpurškimo srautas (saugus modeliavimas)
Štai kaip paprastai atsiskleidžia injekcijos klaida, naudojant išgalvotą, saugų scenarijų:
- Vartotojas siunčia programai sukurtą užklausos parametrą.
- Programėlė nuskaito vertę naudodama užklausa.args.get() be patvirtinimo.
- Ta reikšmė tiesiogiai sujungiama į SQL užklausą, šablono eilutę arba apvalkalo komandą.
- Sistema vykdo tą logiką, nežinodama apie įterptą turinį.
Pseudokodas (nesaugus, tik iliustracinis):
Išgalvotas žurnalo pėdsakas:
Nors šiame pavyzdyje naudojami vietos žymekliai, jis atspindi, kaip nedidelės įvesties apdorojimo klaidos gali sukelti kritinių pažeidžiamumų.
Automatiniai testai gali to nepastebėti, nes paprastai jie tikrina galiojančius įvesties tipus, o ne netinkamai suformuotus ar kenkėjiškus.
Paslėpta rizika priklausomybėse naudojant Kolbos užklausa bei Kolbos prašymo forma
Jūsų kodas gali būti švarus, bet trečiųjų šalių paketai vis tiek gali jus sugadinti.
Kai kurie „Flask“ įskiepiai arba bibliotekos viduje iškviečia „flask request“ arba „flask request form“ be patvirtinimo.
Pavyzdys su fiktyviais paketais:
In CI/CDautomatiniai priklausomybių atnaujinimai gali tyliai įvesti nesaugias užklausas.get iškvietimus arba pažeidžiamus įvesties apdorojimo modelius.
Kaip nesaugu Kolbos užklausa Naudojimo praslysta pro kodo apžvalgas
Greitai besikeičiančioje aplinkoje mažos, bet pavojingos klaidos dažnai lieka nepastebėtos, ypač kai pokytis atrodo nekenksmingas.
Pavyzdys pull request skirtumas:
Recenzento komentaras:
„Atrodo gerai, tik gauna parametrą.“
Toks neatitikimas yra dažnas dėl šių priežasčių:
- Kognityvinis šališkumasRecenzentai gali manyti, kad request.args.get() pagal numatytuosius nustatymus yra saugus.
- Laiko spaudimasArtėjant terminams, saugumo patikros nukeliauja į antrą planą.
- Skirtumas tarp pažįstamųpakeitimas atrodo nedidelis, todėl jis nėra atidžiai nagrinėjamas.
Neturint aiškių taisyklių ar automatizuoto vykdymo, šios subtilios rizikos nepastebimai prasiskverbia į gamybą.
Prevencija, kuri veikia
Siekiant sumažinti injekcijos riziką, derinkite įvesties patvirtinimą, automatinį nuskaitymą ir testavimo aprėptį.
Įvesties patvirtinimas naudojant perdavimą ir įtraukimą į baltąjį sąrašą:
Transformavimas priverčia reikšmę būti saugiu tipu, o baltasis sąrašas užtikrina, kad bus naudojamos tik žinomos geros reikšmės.
Statinis programų saugumo testavimas (SAST) in CI/CD:
Šis žingsnis padeda aptikti nepatvirtintus užklausa.args.get() or užklausa.forma.get() skambučius prieš jiems pasiekiant gamybos etapą.
Vienetų testai dezinfekavimui užtikrinti:
Šie testai užtikrina, kad programa nuosekliai atmestų netinkamai suformuotą arba kenkėjišką įvestį.
Integracija į „DevSecOps“ Pipelines
Tarpinės programinės įrangos vykdymas:
@app.before_request
Skenuojamas ir jūsų kodas, ir trečiųjų šalių priklausomybės padeda aptikti nesaugias užklausas.get, kolbos užklausas ir kolbos užklausos formos naudojimą prieš joms pasiekiant gamybinę aplinką.
Ši problema neapsiriboja vien kolba
Nesaugus įvesties apdorojimas nėra būdingas tik „Flask“, jis egzistuoja įvairiose žiniatinklio sistemose. Laimei, sprendimas yra nuoseklus: įvesties duomenys tikrinami anksti ir griežtai.
Django (saugus pseudokodas):
„FastAPI“ (saugus dizainas, naudojant tipų užuominas):
Abu pavyzdžiai užtikrina įvesties tipo ir diapazono nustatymą, užtikrindami, kad gaunami duomenys būtų patikimi, kol jie nepasiekė jautrios logikos.
Nesvarbu, ar tai „Flask“, „Django“, ar „FastAPI“, kiekvienas užklausos parametras yra potencialus injekcijos taškas, jei jis netinkamai patvirtintas.
„Xygeni“ naudojimas aptikimui „DevSecOps“ aplinkoje
„DevSecOps“ aplinkoje rankinių peržiūrų nepakanka. Ksigeni automatizuoja nesaugių kolbų užklausų aptikimą, kolbų užklausos formą ir „requests.get“ naudojimą.
Praktinės „DevSecOps“ programos:
- Statiniai nuskaitymai: Pažymi bet kokį užklausa.args.get() be tipas =ir kolbos užklausos formos iškvietimai be patvirtinimo.
- Priklausomybių analizėStebi bibliotekas, ieškodamos nesaugių šablonų, kurie gali atsirasti per netiesioginius iškvietimus.
- Nesaugių sujungimų blokavimas: CI/CD nepavyksta, jei naujas kodas įveda rizikingas užklausas.get arba nepatvirtintą formos prieigą.
- Bazinis vykdymo užtikrinimas: Seka pakeitimus, kad saugūs skambučiai nevirstų nesaugiais.
Šių patikrinimų automatizavimas sumažina žmogiškųjų klaidų riziką ir užtikrina nuolatinį saugumą nesulėtindamas pristatymo.
Taigi, patvirtinkite, išvalykite, automatizuokite
Štai esmė: „requests.get“, „flask request“ ir „flask request form“ yra nepatikimas pagal numatytuosius nustatymusJie mielai perduos kenkėjiškus duomenis, nebent imsitės veiksmų.
Trys tavo taisyklės:
- patvirtinti įvestis naudojant perdavimą ir baltuosius sąrašus.
- Sanitize prieš duomenims paliečiant jautrias operacijas.
- Automatizuoti patikrinimai jūsų pipeline sustabdyti nesaugų kodą prieš diegimą.
Viena nesaugi kolbos užklausų tvarkyklė, nepatikrintas kolbos užklausos formos laukas arba neapsaugotas requests.get iškvietimas gali pakenkti jūsų programai. Kiekvieną parametrą traktuokite kaip potencialiai pavojingą ir leiskite savo „DevSecOps“ specialistui... pipeline kiekvieną kartą vykdyti taisykles.




