Galdutako txekea, eta horrek kostua izan dezake: Requests.get eta Flask eskaera orria
Imajinatu hau: garatzaile gazte bat presiopean ari da lanean funtzio bat bidaltzeko. Flask aplikazio bat irekitzen dute, ibilbide berri bat gehitzen dute, kontsulta-parametro bat hartzen dute eta aurrera jarraitzen dute.
# 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
Lehen begiratuan, Flask eskaera honen erabilera ondo dago. Baina kendu mota=int eta atea irekitzen diozu injekzio erasoak. Arrisku mota hauek kodearen berrikuspenetatik atseden hartzen dute, "balio bat lortzen ari delako besterik gabe".
Arriskua non ezkutatzen den Flask Eskaera FEskaera orria
Bi matrazea.eskaera flask.eskaera.formularioa fidagarriak ez diren sarrera-puntuak dira. Itzulitako balio bakoitza bezeroarengandik zuzenean dator eta potentzialki etsaitzat hartu behar da.
Datu hauek baliozkotu edo garbitu ezean, segurtasun arazo larriak sor daitezke, besteak beste:
- SQL injekzioa
- Gune arteko scripting-a (XSS)
- Txantiloi injekzioa
- Shell komandoen injekzioa
Arrisku hauek ez dira datu-baseetan edo frontend-eko errendatzean bakarrik aplikatzen; erasotzaileek txantiloietan erabilitako edo azpiprozesuetara pasatako sarrerak ere ustia ditzakete.
Sasi-kode eredu seguruak:
python
# ⚠️ Educational example only — not functional
env_target = input("Enter deployment environment: ")
simulate_deploy(env_target) # Simulated for demonstration
Prebentzio CI/CD betearazpena:
# 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)
Sintaxia segurua dirudien arren, txantiloietan edo sistemaren komandoetan balio gordinak edo egiaztatu gabeak erabiltzea injekzio bektore larria bihur daiteke.
Injekzio-fluxu praktikoa (simulazio segurua)
Hona hemen injekzio-akats bat nola gertatzen den normalean, fikziozko eszenatoki seguru bat erabiliz:
- Erabiltzaile batek landutako kontsulta-parametro bat bidaltzen dio aplikazioari.
- Aplikazioak balioa irakurtzen du erabiliz eskaera.args.get() baliozkotzerik gabe.
- Balio hori zuzenean SQL kontsulta, txantiloi-kate edo shell komando batean kateatzen da.
- Sistemak logika hori exekutatzen du, txertatutako edukiaz jabetu gabe.
Sasi-kodea (segurua ez dena, ilustratiboa soilik):
# 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
Erregistroaren arrasto fiktiboa:
[INFO] Incoming request: /user?id=unexpected_input
[DEBUG] Parsed user_id: unexpected_input
[DEBUG] Constructed SQL: SELECT * FROM users WHERE id = unexpected_input
Adibide honek leku-markatzaileak erabiltzen dituen arren, sarrera-kudeaketaren hutsegite txikiek ahultasun kritikoak nola ekar ditzaketen islatzen du.
Baliteke proba automatizatuek hau ez ikustea, normalean sarrera mota baliodunak probatzen baitituzte, ez gaizki eratutakoak edo gaiztoak.
Menpekotasunetan ezkutuko arriskuak erabiltzean Matrazaren eskaera Matrazaren eskaera orria
Zure kodea garbia izan daiteke, baina hirugarrenen paketeek oraindik ere arazoak izan ditzakete.
Flask plugin edo liburutegi batzuek barne-balidaziorik gabe deitzen dute flask request edo flask request form.
Adibidea pakete fikziozkoekin:
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, mendekotasunen eguneratze automatizatuek isilean sar ditzakete eskaera ez-seguruak, deiak edo sarrera-kudeaketa eredu zaurgarriak.
Zein arriskutsua Matrazaren eskaera Erabilera-txartelak Aurreko Kodearen Berrikuspenak
Ingurune azkarretan, akats txiki baina arriskutsuak oharkabean pasatzen dira askotan, batez ere aldaketa kaltegabea dirudienean.
Adibidea pull request desberdintasuna:
# Insecure example — do not run in production
- user_id = request.args.get("id")
+ user_id = request.args.get("id") # Still missing type casting
Berrikuslearen iruzkina:
"Ondo dirudi, parametro bat jasotzen ari da besterik gabe."
Mota honetako gainbegiratzea ohikoa da honako arrazoiengatik:
- Alborapen kognitiboa: berrikusleek request.args.get() lehenespenez segurua dela pentsa dezakete.
- Denbora-presioasegurtasun-egiaztapenak bigarren mailan geratzen dira epeak hurbiltzen direnean.
- Ezagutza desberdina: aldaketa txikia dirudi, beraz, ez da azterketa sakonik jasotzen.
Arau argirik edo betearazpen automatizaturik gabe, arrisku sotil hauek oharkabean sartzen dira ekoizpenera.
Prebentzio eraginkorra
Injekzio arriskuak arintzeko, konbinatu sarreraren balidazioa, eskaneatzea automatizatua eta probaren estaldura.
Sarreraren balidazioa casting eta zerrenda zuriarekin:
user_id = request.args.get("id", type=int)
if user_id not in [1, 2, 3]:
abort(400, "Invalid ID")
Balioa mota seguru batera behartzen du bihurtzeak, eta zerrenda zuriak, berriz, balio on ezagunak bakarrik aurrera egiten duela ziurtatzen du.
Aplikazioen Segurtasun Proba Estatikoak (SAST) sartu CI/CD:
name: Run SAST scan
run: sast-tool --scan src/ --fail-on "request.args.get without type"
Urrats honek balioztatu gabekoak detektatzen laguntzen du eskaera.args.get() or eskaera.formularioa.lortu() deiak ekoizpenera iritsi aurretik.
Unitate-probak garbiketa betearazteko:
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
Proba hauek ziurtatzen dute aplikazioak sarrera okerra edo gaiztoa baztertzen duela modu etengabean.
DevSecOps-en integrazioa Pipelines
Middlewarearen betearazpena:
@app.eskaera_aurretik
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
Zure kodea eta hirugarrenen mendekotasunak eskaneatzea eskaera ez-seguruak detektatzen laguntzen du.get, flask request eta flask request formularioaren erabilera ekoizpenera iritsi aurretik.
Arazo hau matrazearen haratago doa
Sarrerako kudeaketa ez-segurua ez da Flaskena bakarrik, web esparru guztietan existitzen da. Zorionez, irtenbidea koherentea da: sarrerak goiz eta zorrotz balioztatu.
Django (pseudo-kode segurua):
# 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 (diseinuagatik segurua mota-aholkuak erabiliz):
from fastapi import Query
@app.get("/items")
def read_items(id: int = Query(..., ge=1, le=3)):
return {"id": id}
Bi adibideek sarrera mota eta barrutia betearazten dituzte, sarrerako datuak fidagarriak direla ziurtatuz logika sentikorrera iritsi aurretik.
Flask, Django edo FastAPI izan, eskaera-parametro guztiak injekzio-puntu potentzialak dira behar bezala balioztatu ezean.
Xygeni erabiltzea DevSecOps-en detekziorako
DevSecOps ingurune batean, eskuzko berrikuspenak ez dira nahikoak. Xigenoa matraze-eskaera ez-seguruen, matraze-eskaera-formularioaren eta requests.get-en erabileraren detekzioa automatizatzen du.
DevSecOps aplikazio praktikoak:
- Eskaneatze estatikoakEdozein markatu eskaera.args.get() gabe mota=, eta balidaziorik gabeko matraze eskaera orriaren deiak.
- Mendekotasun-analisiaLiburutegiak kontrolatzen ditu zeharkako deien bidez ager daitezkeen eredu ez-seguruak bilatzeko.
- Bateratze ez-seguruak blokeatzea: CI/CD huts egiten du kode berriak eskaera arriskutsuak sartzen baditu.get edo balioztatu gabeko formulario sarbidea sartzen badu.
- Oinarrizko betearazpenaAldaketak jarraitzen ditu dei seguruak ez-seguruetara itzul ez daitezen.
Egiaztapen hauek automatizatzeak giza akatsen arriskua murrizten du eta segurtasuna etengabe mantentzen du entrega moteldu gabe.
Beraz, Balioztatu, Garbitu, Automatizatu
Hona hemen kontua: requests.get, flask request eta flask request form guztiak dira lehenespenez fidagarria ez denaPozik emango dizkizute datu gaiztoak neurririk hartu ezean.
Zure hiru arauak:
- Balidatu sarrerak casting eta zerrenda zuriak erabiliz.
- higienizatzeko datuek eragiketa sentikorrak ukitu aurretik.
- automatizatu zure txekeak pipeline kode ez-segurua geldiarazteko zabaldu aurretik.
Matraz eskaera kudeatzaile ez-seguru bakar batek, matraz eskaera inprimaki eremu egiaztatu gabe batek edo requests.get dei babestu gabe batek zure aplikazioa arriskuan jar dezake. Tratatu parametro guztiak potentzialki etsai gisa, eta utzi zure DevSecOps-i pipeline arauak betearazi aldiro.







