Seky tsy hita izay mety handany anao: Taratasy fangatahana Requests.get sy Flask
Alaivo sary an-tsaina izao: misy mpamorona rindrambaiko zandriny miasa eo ambany fanerena handefasana endri-javatra iray. Manokatra fampiharana Flask izy, manampy lalana vaovao, maka masontsivana fangatahana, ary manohy ny diany.
# Demonstrative example only — NOT executable, not exploitable
from flask import Flask, request
@app.route("/items")
def get_items():
# Type casting avoids unsafe string injection
item_id = request.args.get("id", type=int)
# Safe usage: forces integer input, prevents injection
Raha vao jerena dia toa tsara ity fampiasana fangatahana Flask ity. Fa esory karazana=int ary ianao no manokatra ny varavarana ho fanafihana tsindrona. Ireo no karazana risika izay tsy voafehy rehefa jerena ny kaody satria "maka tombony fotsiny izy io."
Aiza no iafenan'ny risika FFangatahana lask sy FTaratasy Fangatahana lask
samy fangatahana tavoahangy sy endrika fangatahana tavoara dia teboka fidirana tsy azo itokisana. Ny sanda rehetra averin'izy ireo dia avy amin'ny mpanjifa mivantana ary tokony hoheverina ho mety ho fahavalo.
Ny tsy fanamarinana na fanadiovana ity angona ity dia mety hiteraka olana ara-piarovana lehibe, anisan'izany:
- Tsindrona SQL
- Famoronana sora-tanana (XSS)
- Tsindrona template
- Tsindrona baiko Shell
Tsy mihatra amin'ny angon-drakitra na ny fampisehoana eo anoloana ihany ireo risika ireo; mety hanararaotra ny fidirana ampiasaina amin'ny môdely na alefa any amin'ny subprocesses ihany koa ireo mpanafika.
Lamina pseudo-code azo antoka:
python
# ⚠️ Educational example only — not functional
env_target = input("Enter deployment environment: ")
simulate_deploy(env_target) # Simulated for demonstration
fisorohana CI/CD fampiharana:
# 1. Query parameter — Safe with casting
user_id = request.args.get("id", type=int) # Enforces integer type
# 2. Form parameter — Safe with casting
username = request.form.get("username", type=str) # Enforces string type
# 3. Template rendering safeguard
template_data = {"name": request.args.get("name", type=str)} # Avoids untrusted HTML injection
# 4. Shell command safe handling
filename = request.args.get("file", type=str)
# Validate filename against known safe values before use in subprocess (not shown)
Na dia toa azo antoka aza ny firafitry ny rafitra, ny fampiasana sanda manta na tsy voamarina ao anaty môdely na baikon'ny rafitra dia mety ho lasa vector fampidirana lehibe.
Fikorianan'ny tsindrona azo ampiharina (Simulasi azo antoka)
Toy izao ny fomba fisehon'ny lesoka amin'ny tsindrona, amin'ny fampiasana toe-javatra noforonina sy azo antoka:
- Mandefa paramètre fangatahana noforonina any amin'ny fampiharana ny mpampiasa iray.
- Mamaky ny sandany amin'ny alalan'ny fampiharana ny fampiharana fangatahana.args.get() tsy misy fanamarinana.
- Io sanda io dia ampiarahina mivantana amin'ny fangatahana SQL, tady môdely, na baiko shell.
- Manatanteraka izany lojika izany ny rafitra, tsy mahafantatra ny votoaty nampidirina.
Kaody sandoka (tsy azo antoka, fanoharana fotsiny ihany):
# Insecure example — do not run in production
user_id = request.args.get("id") # Missing type casting, no validation
query = f"SELECT * FROM users WHERE id = {user_id}" # Risk of injection
Taratasy fanoratana foronina:
[INFO] Incoming request: /user?id=unexpected_input
[DEBUG] Parsed user_id: unexpected_input
[DEBUG] Constructed SQL: SELECT * FROM users WHERE id = unexpected_input
Na dia mampiasa solon-toerana aza ity ohatra ity, dia taratry ny fomba mety hiteraka fahalemena lehibe ny tsy fitandremana kely amin'ny fikirakirana ny fidirana.
Mety tsy hahita izany ireo fitsapana mandeha ho azy satria mazàna izy ireo dia mitsapa karazana fampidirana manan-kery, fa tsy ireo tsy ara-dalàna na mampidi-doza.
Loza miafina amin'ny fiankinan-doha amin'ny fampiasana Fangatahana Tavoara sy Taratasy Fangatahana Tavoara
Mety ho madio ny kaody-nao, saingy mbola mety hanimba anao ihany ny fonosana avy amin'ny antoko fahatelo.
Ny plugins na tranomboky Flask sasany dia miantso anatiny ny fangatahana flask na ny taratasy fangatahana flask tsy misy fanamarinana.
Ohatra amin'ny fonosana foronina:
python
# Insecure example — do not run in production
return AutoFormHandler.process() # May use request.form.get() without validation
python
# Insecure example — do not run in production
query = build_query(request.args) # May use request.args.get() without casting
In CI/CD, ny fanavaozana ny fiankinan-doha mandeha ho azy dia mety hampiditra mangina fangatahana tsy azo antoka. mahazo antso na lamina fikirakirana fidirana marefo.
Tena tsy azo antoka Fangatahana Tavoara Famerenana ny kaody efa lany daty
Ao anatin'ny tontolo iainana haingam-pandeha, matetika tsy voamarika ireo fahadisoana madinika nefa mampidi-doza, indrindra rehefa toa tsy mampaninona ny fiovana.
ohatra pull request fahasamihafana:
# Insecure example — do not run in production
- user_id = request.args.get("id")
+ user_id = request.args.get("id") # Still missing type casting
Fanehoan-kevitry ny mpandinika:
"Toa tsara izany, mahazo masontsivana fotsiny izy io."
Fahita matetika ity karazana tsy fitandremana ity noho ny:
- Fitongilanana ara-tsaina: mety hihevitra ireo mpandinika fa azo antoka ny request.args.get() amin'ny alàlan'ny default.
- Fanerena ny fotoana: tsy dia atao an-kilabao intsony ny fisavana fiarovana rehefa akaiky ny fe-potoana farany.
- Fahazarana samihafa: toa kely dia kely ny fiovana, ka tsy dia misy fandinihana lalina loatra.
Raha tsy misy fitsipika mazava na fampiharana mandeha ho azy, dia tsy ho voamarika akory ireo loza an-kolaka ireo.
Fisorohana mahomby
Mba hampihenana ny mety ho loza ateraky ny tsindrona, ampiarahina ny fanamarinana ny fidirana, ny scan mandeha ho azy, ary ny fandrakofana fitsapana.
Fanamarinana fidirana amin'ny alalan'ny casting sy whitelist:
user_id = request.args.get("id", type=int)
if user_id not in [1, 2, 3]:
abort(400, "Invalid ID")
Ny fanaovana "casting" dia manery ny sanda ho amin'ny karazana azo antoka, raha ny fanaovana "whitelist" kosa dia miantoka fa ny sanda fantatra tsara ihany no mitohy.
Fitsapana fiarovana ny fampiharana statika (SAST) ao CI/CD:
name: Run SAST scan
run: sast-tool --scan src/ --fail-on "request.args.get without type"
Ity dingana ity dia manampy amin'ny famantarana ireo tsy voamarina fangatahana.args.get() or fangatahana.form.get() antso alohan'ny hahatongavany amin'ny famokarana.
Fitsapana singa mba hampiharana ny fanadiovana:
def test_invalid_type(client):
response = client.get("/items?id=abc")
assert response.status_code == 400
These tests ensure the app rejects malformed or malicious input consistently.
Integrating Into DevSecOps Pipelines
Middleware enforcement:
@app.before_request
Ireo fitsapana ireo dia miantoka fa mandà tsy tapaka ny fidirana tsy ara-dalàna na mampidi-doza ny fampiharana.
Fampidirana ao amin'ny DevSecOps Pipelines
Fampiharana ny "Middleware":
@app.before_request
def sanitize_input():
if "id" in request.args and not request.args.get("id", type=int):
abort(400, "Invalid ID")
Pre-commit hook:
bash
if grep -R "request.args.get(" . | grep -v "type="; then
echo "Unsafe request.args.get detected — please add type casting."
exit 1
fi
Fijerena ny kaody sy ny fiankinan-doha amin'ny antoko fahatelo Manampy amin'ny fisamborana ireo fangatahana tsy azo antoka.get, fangatahana tavoahangy, ary fampiasana taratasy fangatahana tavoahangy alohan'ny hahatongavany amin'ny famokarana.
Mihoatra lavitra noho ny tavoara ity olana ity
Tsy ny Flask ihany no misy ny fikirakirana fidirana tsy azo antoka, fa misy amin'ny rafitra web rehetra. Soa ihany fa mitovy ny vahaolana: manamarina ny fidirana mialoha sy amin'ny fomba hentitra.
Django (pseudo-code azo antoka):
# Enforces integer type and applies whitelist
user_id = int(request.GET.get("id", "0"))
if user_id not in [1, 2, 3]:
return HttpResponseBadRequest()
FastAPI (azo antoka amin'ny alàlan'ny famolavolana mampiasa fanoroana karazana):
from fastapi import Query
@app.get("/items")
def read_items(id: int = Query(..., ge=1, le=3)):
return {"id": id}
Samy mampihatra ny karazana sy ny elanelana fampidirana ireo ohatra roa ireo, mba hahazoana antoka fa azo itokisana ny angona miditra alohan'ny hahatongavany amin'ny lojika saro-pady.
Na Flask, Django, na FastAPI izany, ny masontsivana fangatahana rehetra dia mety ho teboka fampidirana raha tsy voamarina tsara.
Mampiasa Xygeni ho an'ny Fitiliana ao amin'ny DevSecOps
Ao anatin'ny tontolo DevSecOps, tsy ampy ny famerenana amin'ny tanana. Xygeni Manao ho azy ny fitadiavana fangatahana tavoara tsy azo antoka, ny taratasy fangatahana tavoara, ary ny fangatahana fampiasana requests.get.
Fampiharana azo ampiharina amin'ny DevSecOps:
- Fijerena statika: Maneho marika na inona na inona fangatahana.args.get() tsy misy karazana=, ary ireo antso amin'ny endrika fangatahana flask tsy misy fanamarinana.
- Famakafakana ny fiankinan-doha: Manara-maso ireo tranomboky mba hahitana ireo lamina tsy azo antoka izay mety hipoitra amin'ny alàlan'ny antso ankolaka.
- Fanakanana ireo fampivondronana tsy azo antoka: CI/CD Tsy mahomby raha toa ka mampiditra fangatahana mampidi-doza.get na fidirana amin'ny endrika tsy voamarina ny kaody vaovao.
- Fampiharana fototra: Manara-maso ny fiovana mba tsy hiverenan'ny antso azo antoka ho amin'ny antso tsy azo antoka.
Ny fanaovana ho azy ireo fanamarinana ireo dia mampihena ny mety hisian'ny fahadisoana ataon'olombelona ary mitazona ny fiarovana ho mitohy nefa tsy miadana ny fanaterana.
Koa, Hamarino, Diovy, Ataovy Mandeha ho azy
Ity ny fehin-kevitra: ny requests.get, ny flask request, ary ny flask request form dia samy tsy azo itokisana amin'ny alàlan'ny defaultHanome angon-drakitra manimba amim-pifaliana izy ireo raha tsy hoe mandray fepetra ianao.
Ireto ny fitsipika telo arahinao:
- hanamafy fampidirana amin'ny alàlan'ny casting sy whitelists.
- Manadio alohan'ny hikasihan'ny angona ireo asa saro-pady.
- Automate seky ao amin'ny anao pipeline mba hampijanonana ny kaody tsy azo antoka alohan'ny fametrahana azy.
Mety hanimba ny fampiharanao ny mpitantana fangatahana flask tokana tsy azo antoka, ny saha fangatahana flask tsy voamarina, na ny antso requests.get tsy voaaro. Hevero ho toy ny mety ho fahavalo ny masontsivana rehetra, ary avelao ny DevSecOps-nao. pipeline mampihatra ny fitsipika amin'ny fotoana rehetra.







