Wakati Upakiaji wa Faili Unageuka Kuwa Ufikiaji wa Faili
Kidhibiti kimoja cha upakiaji kisicho salama kinaweza kufungua mlango wa shambulio kamili la njia na udhaifu wa upakiaji wa faili. Wasanidi programu wanapounganisha majina ya faili moja kwa moja na njia za upakiaji, washambuliaji wanaweza kuwasilisha majina ya faili hasidi kama ../../nk/passwd ili kuepuka saraka na kufikia faili nyeti. Aina hii ya upitiaji wa njia hubadilisha API rahisi ya upakiaji kuwa unyonyaji wenye nguvu wa ufikiaji wa faili, haswa wakati programu inaendeshwa na ruhusa za juu.
⚠️Mfano usio salama, kwa madhumuni ya kielimu pekee. Usitumie katika uzalishaji.
// Vulnerable upload handler, file upload vulnerability [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var path = Path.Combine("uploads/", file.FileName); // No validation using var stream = new FileStream(path, FileMode.Create); await file.CopyToAsync(stream); return Ok("File uploaded!"); } Mshambuliaji anaweza kupakia faili inayoitwa ../../web.config kuandika au kusoma faili zilizowekewa vikwazo, shambulio la kawaida la njia ya kupita.
Toleo salama:
// Safe upload with validation and canonicalization [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var fileName = Path.GetFileName(file.FileName); // strip directories var targetDir = Path.GetFullPath("uploads/"); var safePath = Path.Combine(targetDir, fileName); if (!safePath.StartsWith(targetDir)) return BadRequest("Invalid file path"); using var stream = new FileStream(safePath, FileMode.Create); await file.CopyToAsync(stream); return Ok("File securely uploaded!"); } Dokezo la kielimu: Daima badilisha njia kuwa za kawaida kwa kutumia Njia.PataNjia Kamili() na hakikisha kwamba matokeo yanabaki ndani ya saraka yako ya upakiaji. Kamwe usiamini faili.Jina la Faili moja kwa moja.
Makosa ya Wasanidi Programu Yanayowezesha Upitiaji wa Njia
Udhaifu mwingi wa kupakia faili unaosababisha upitiaji wa njia hutokana na msimbo wa haraka na ukosefu wa uthibitishaji. Makosa ya kawaida ya msanidi programu ni pamoja na:
- Kuunganisha ingizo la mtumiaji moja kwa moja kwenye njia za mfumo wa faili
- Kujiamini Aina ya Yaliyomo au uthibitisho wa kiendelezi pekee
- Kuruka urekebishaji wa njia kabla ya kuhifadhi
Kutumia tena folda za muda katika maombi au huduma ndogo
⚠️Mfano usio salama, kwa madhumuni ya kielimu pekee. Usitumie katika uzalishaji.
# Flask example vulnerable to path traversal attack @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] file.save('uploads/' + file.filename) return 'Uploaded' Washambuliaji wanaweza kukwepa muunganiko huu rahisi ili kupitia saraka (../../app.py) na kuandika au kubatilisha faili kiholela. Toleo salama:
# Safe file upload validation from werkzeug.utils import secure_filename @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] name = secure_filename(file.filename) path = os.path.join('uploads', name) file.save(path) return 'Securely uploaded' Dokezo la kielimu: Tumia wasaidizi waliotolewa na mfumo kama vile jina_la_faili_salama na utekeleze viendelezi vilivyoorodheshwa vilivyoruhusiwa. Kamwe usiunganishe ingizo kwenye njia za faili mwenyewe.
Unyonyaji katika Halisi PipelineHuduma Ndogo na za Kawaida
Mashambulizi ya njia hayafanyiki tu katika sehemu za mwisho za umma. Mara nyingi huonekana ndani CI/CD mifumo, hazina za vipengee vya kale, au huduma ndogo ndogo zinazosimamia faili zilizopakiwa. Kwa mfano, udhaifu wa kupakia faili katika kidhibiti cha vizalia vya ujenzi unaweza kumruhusu mshambuliaji kuandika hati za ujenzi au ingiza faili hasidi kwenye viendeshaji vilivyoshirikiwa.
⚠️Mfano usio salama, kwa madhumuni ya kielimu pekee. Usitumie katika uzalishaji.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $JINA LA FILE haijathibitishwa, imetengenezwa ../../../nk/passwd thamani inaweza kubatilisha faili muhimu za mfumo wakati wa utekelezaji, shambulio la njia halisi. Toleo salama:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" Dokezo la kielimu: In pipelines, safisha vigeu vyote vya njia vinavyobadilika. Punguza shughuli za uandishi kwenye saraka zinazodhibitiwa ili kuzuia mfumo wa faili kutoroka wakati wa ujenzi au usanidi.
Kuzuia Upitaji wa Njia katika Mantiki ya Upakiaji
Kupunguza upitishaji wa njia huanza na uthibitisho thabiti wa ingizo na utenganishaji. Chukua majina ya faili na njia kama ingizo lisiloaminika tangu mwanzo, haswa wakati wa kushughulikia faili zilizopakiwa.
Best Practices
- Rekebisha na urekebishe njia zote kabla ya kuzitumia.
- Zuia upakiaji kwenye saraka maalum nje ya mzizi wa wavuti.
- Tekeleza orodha za vibali kwa viendelezi vya faili na aina za MIME.
- Kamwe usitumie tena folda za muda kati ya vipindi au watumiaji.
- Tumia hifadhi iliyohifadhiwa kwenye vyombo kwa faili zilizopakiwa inapowezekana.
Orodha ndogo ya kuzuia
- Thibitisha kila jina la faili kwa kutumia Njia.Pata Jina la Faili() au sawa.
- Tatua njia kamili na uthibitishe mipaka ya saraka.
- Tumia kiendelezi na orodha za vibali vya MIME.
- Tumia folda tofauti za kupakia kwa kila mtumiaji au kipindi.
- Jumuisha uchanganuzi wa upakiaji na uthibitishaji katika CI/CD mitihani
Dokezo la kielimu: Kila kidhibiti cha upakiaji wa faili kinaweza kuwa vekta ya mashambulizi ya njia. Jenga ulinzi wa kina kwa kuthibitisha, kutenganisha, na kuchanganua msimbo wote wa kushughulikia faili.
Jinsi Xygeni Inavyogundua na Kuzuia Mitiririko ya Upakiaji Isiyo Salama
Xygeni Code Security scans besi za msimbo na pipelines ili kugundua mifumo ya njia kabla ya kufikia uzalishaji. Inaashiria muunganiko wa njia usio salama, ukosefu wa uhalalishaji, na shughuli hatari za faili katika msimbo na CI/CD maandishi.
Kijisehemu kinachofanya kazi, chenye sehemu ya kuegemea:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk Dokezo la kielimu: Kuijumuisha Xygeni ndani yako pipeline inahakikisha kwamba udhaifu wa kupakia faili na mashambulizi ya njia yanakamatwa kiotomatiki wakati wa uthibitishaji wa ujenzi.
Kufunga Pengo: Kuzuia Shambulio la Njia Yako Inayofuata
Hitilafu ya njia moja ya kupita katika sehemu ya mwisho ya kupakia faili inaweza kuwapa washambuliaji ufikiaji wa mfumo wa faili wa seva yako. Kagua vidhibiti vya upakiaji kwa miunganisho isiyo salama, rekebisha njia zote, na usiwaamini kamwe majina ya faili yanayodhibitiwa na mtumiaji. Kuongeza zana za kuchanganua udhaifu kama Xygeni Code Security kwa yako DevSecOps pipeline ili kugundua mashambulizi ya njia na udhaifu wa kupakia faili kabla ya kusafirishwa. Kwa usalama, kila faili iliyohifadhiwa lazima ichukuliwe kama msimbo uliotekelezwa!






