„Python“ vartotojo įvestis – vartotojo įvestis „Python“ – kaip gauti vartotojo įvestį „Python“ kalboje

Neteisingas būdas gauti vartotojo įvestį Python kalboje (ir saugi alternatyva)

Kada įvestis () Neteisinga

Kartą „Python“ diegimo scenarijus paprašė konsolės komandos. Viena neteisingai įvesta įvestis sukėlė neteisingą operaciją ir nutraukė gamybinę versiją. Toks yra Python vartotojo įvesties pavojus: viena nepatikrinta eilutė gali sukelti injekciją, duomenų praradimą arba loginį apėjimą. Panagrinėkime, kodėl taip nutinka ir kaip saugiai tvarkyti vartotojo įvestį Python kalba tiek atvirojo kodo, tiek vidiniuose projektuose.

Problema su vartotojo įvestis() Pitonas

Geriausios įvestis () Funkcija „Python“ kalboje yra paprasta: ji nuskaito tekstą iš konsolės ir grąžina jį kaip eilutę. Jokių patvirtinimų. Jokių patikrinimų. Atskirai tai atrodo nekenksminga. Tačiau gamybos scenarijuose CI/CD darbo vietose ir automatizavimo įrankiuose neapdorotos „Python“ vartotojo įvesties perdavimas tiesiai į komandas ar funkcijas atveria duris pažeidžiamumams.

⚠️ Tik edukacinis pavyzdys, nefunkcionalus ar netinkamas naudoti

Jei svarstote, kaip saugiai gauti vartotojo įvestį Python kalboje, atsakymas paprastas: niekada nepasitikėkite ja aklai.

Rizikos ir saugus tvarkymas „DevSecOps“ sistemoje Pipelines

Nesaugi „Python“ vartotojo įvestis gali prasiskverbti į skirtingas puses programinės įrangos gyvavimo ciklo etapai:

  • CI/CD scenarijai kurie diegia arba kuria artefaktus
  • Vidiniai kūrėjo įrankiai kontroliuojančios aplinkos
  • Trečiųjų šalių integracijos kurie daro prielaidą, kad įvestis yra saugi.

Jei priklausomybė apdoroja vartotojo įvestį „Python“ be patvirtinimo, jūs paveldite šią riziką, net jei jūsų kodas yra saugus. Štai kodėl patvirtinimas turi būti vykdomas nuosekliai visame pipeline.

Pavyzdys pipeline rizika:

Prevencinis CI/CD vykdymo užtikrinimas:

Pagrindinis išsinešimas: Žinoti, kaip saugiai gauti vartotojo įvestį Python kalboje, yra tik pusė darbo; automatizuotas vykdymas užtikrina Nesaugus kodas niekada nepasiekia produkcijos.

Įprasti atakų vektoriai

Nesaugi „Python“ vartotojo įvestis gali sukelti daugiau nei „blogus duomenis“. Dažniausios rizikos:

Loginis apėjimas, praleidžiant autentifikavimą arba keičiant srautą naudojant sukurtą įvestį.

Jei pasikliaujate neapdorota vartotojo įvestimi „Python“, perduodate valdymą vartotojui arba užpuolikui.

Saugi alternatyva: įvesties patvirtinimas ir valymas

Tikslas nėra pašalinti įvestis () iš viso kodo, tai skirta užtikrinti, kad „Python“ vartotojo įvestis būtų patvirtinta prieš jai paliečiant kritines operacijas.

Saugiausias būdas gauti vartotojo įvestį Python kalboje yra:

  • Vykdyti tipo patikrinimus
  • Taikyti baltuosius sąrašus leidžiamoms reikšmėms
  • Naudokite saugias analizavimo bibliotekas, pvz. argparse bei pidantiškas.

Greitas palyginimas

Scenarijus Nesaugus pavyzdys Saugus pavyzdys
Tiesioginis naudojimas input()
  # ⚠️ Educational example only  user_name = input("Enter username: ")  simulate_process(user_name)          
  import argparse  parser = argparse.ArgumentParser()  parser.add_argument("--username", type=str)  args = parser.parse_args()  process(args.username)          
Struktūrinis patvirtinimas
  # ⚠️ Educational example only  age = input("Enter your age: ")          
  from pydantic import BaseModel, ValidationError  class UserInput(BaseModel):      age: int  try:      data = UserInput(age=int(input("Enter your age: ")))  except ValidationError as e:      print("Invalid input:", e)          

Geriausia vartotojo įvesties praktika Python kalba:

  • Konvertuoti tipus ir tvarkyti klaidas (pabandyti/išskyrus)
  • Taikyti baltuosius sąrašus žinomoms reikšmėms
  • Paskirtis argparse CLI ir pidantiškas struktūrizuotiems duomenims

Nesaugios įvesties aptikimas ir vykdymas CI/CD su Xygeni

Rankinės peržiūros nepakanka, kad būtų galima aptikti visą nesaugią „Python“ naudotojo įvestį; svarbiausia yra automatizavimas. Įrankiai kaip Ksigeni nuskaityti saugyklas, ieškant naudotojo įvestų Python šablonų be išvalymo. Integravus į CI/CD, jie nepavyksta atlikti saugos užduoties, jei aptinkamas nesaugus įvesties apdorojimas. Tai blokuoja sujungimą su apsaugotomis šakomis, kol problema nebus išspręsta.

Scenarijus Nesaugus pavyzdys Saugus pavyzdys
Tiesioginis naudojimas input()
  # ⚠️ Educational example only — not functional  name = input("Enter username: ")  simulate_process(name)  # Simulated for demonstration          
  import argparse  parser = argparse.ArgumentParser()  parser.add_argument("--username", type=str)  args = parser.parse_args()  process(args.username)  # Validated by argparse          
Struktūrinis patvirtinimas
  # ⚠️ Educational example only — not functional  age = input("Enter your age: ")          
  from pydantic import BaseModel, ValidationError    class UserInput(BaseModel):      age: int    try:      data = UserInput(age=int(input("Enter your age: ")))  except ValidationError as e:      print("Invalid input:", e)          
CI/CD vykdymas
  # Missing automated checks allows  # unsafe input patterns to slip in  # during reviews/merges.          
  jobs:    security_scan:      runs-on: ubuntu-latest      steps:        - uses: actions/checkout@v3        - name: Run Xygeni Scan          run: xygeni scan \            --rules detect-unsafe-input \            --fail-on-findings          

Kaip tai veikia:

  1. „Xygeni“ ieško nesaugios „Python“ vartotojo įvesties.
  2. Jei randama, grąžinamas ne nulinis išėjimo kodas.
  3. CI/CD pažymi užduotį kaip nepavykusią.
  4. Šakos apsauga blokuoja sujungimą, kol problema nebus išspręsta.

Tai užtikrina, kaip saugiai ir automatiškai gauti vartotojo įvestį Python kalboje.

„Final Takeaways“

Niekada nepasitikėkite „Python“ vartotojo įvestimi be patvirtinimo. Vienas nesaugus įvestis () gali sukelti pažeidimus, diegimo gedimus arba visišką kompromitaciją.

Veiksmų planas:

  • Patvirtinkite nuo pat pradžių:  taikyti tipų konvertavimą, baltuosius sąrašus ir bibliotekas, pvz. argparse or pidantiškas prieš apdorojant vartotojo įvestį Python.
  • Automatinis aptikimas:  konfigūruoti pipelines blokuoti sujungimus, kai randami nesaugūs šablonai.
  • Užtikrinti apsaugos vartais:  integruoti tokius įrankius kaip „Xygeni“ automatinis blokavimas apsaugotose šakose.
  • Mokykite savo komandą:  užtikrinti, kad visi žinotų, kaip saugiai gauti vartotojo įvestį Python kalboje, ir suprastų riziką, kylančią praleidžiant patvirtinimą.

Programos saugumas neprasideda gamybinėje aplinkoje; jis prasideda vos parašius pirmąją kodo eilutę. Nustatykite saugų įvesties apdorojimą kaip numatytąjį nustatymą.

sca-tools-software-composition-analyses-tools
Prioritetizuoti, pašalinti ir apsaugoti savo programinės įrangos rizikas
Gaukite nemokamą paskyrą.
Nebūtina kreditinės kortelės.

Apsaugokite savo programinės įrangos kūrimą ir tiekimą

su „Xygeni“ produktų rinkiniu