وقتی آپلود فایل به دسترسی فایل تبدیل میشود
یک کنترلکنندهی آپلود ناامن میتواند در را برای حملهی پیمایش کامل مسیر و آسیبپذیری آپلود فایل باز کند. وقتی توسعهدهندگان نام فایلها را مستقیماً با مسیرهای آپلود ترکیب میکنند، مهاجمان میتوانند نام فایلهای مخرب را ارسال کنند حرفه ای ../../و غیره/گذرواژه برای فرار از دایرکتوریها و دسترسی به فایلهای حساس. این نوع پیمایش مسیر، یک API آپلود ساده را به یک سوءاستفاده قدرتمند از دسترسی به فایل تبدیل میکند، به خصوص زمانی که برنامه با مجوزهای بالا اجرا میشود.
⚠️مثال ناامن، فقط برای اهداف آموزشی. در محیط عملیاتی استفاده نشود.
// 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!"); } یک مهاجم میتواند فایلی با نام ... را آپلود کند. ../../web.config برای بازنویسی یا خواندن فایلهای محدود شده، یک حمله پیمایش مسیر کلاسیک.
نسخه امن:
// 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!"); } نکته آموزشی: همیشه مسیرها را با موارد زیر استانداردسازی کنید تابع ()Path.GetFullPath را دریافت میکند. و بررسی کنید که نتیجه در دایرکتوری آپلود شما باقی بماند. هرگز به ... اعتماد نکنید. نام فایل.file به طور مستقیم.
اشتباهات توسعهدهندگان که پیمایش مسیر را ممکن میسازد
بیشتر آسیبپذیریهای آپلود فایل که منجر به پیمایش مسیر میشوند، از کدنویسی عجلهای و اعتبارسنجی ناقص ناشی میشوند. خطاهای رایج توسعهدهندگان عبارتند از:
- الحاق ورودی کاربر به طور مستقیم به مسیرهای سیستم فایل
- اعتماد نوع مطلب یا اعتبارسنجی افزونه به تنهایی
- نادیده گرفتن نرمالسازی مسیرها قبل از ذخیره
استفاده مجدد از پوشههای موقت در درخواستها یا میکروسرویسها
⚠️مثال ناامن، فقط برای اهداف آموزشی. در محیط عملیاتی استفاده نشود.
# 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' مهاجمان میتوانند این الحاق ساده را برای پیمایش دایرکتوریها دور بزنند (../../app.py) و فایلهای دلخواه را بنویسد یا بازنویسی کند. نسخه امن:
# 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' نکته آموزشی: از کمککنندههای ارائه شده توسط فریمورک مانند موارد زیر استفاده کنید: نام_فایل_امن و افزونههای مجاز را اعمال کنید. هرگز ورودیها را به صورت دستی در مسیرهای فایل ادغام نکنید.
استثمار در دنیای واقعی Pipelineها و میکروسرویسها
حملات پیمایش مسیر فقط در نقاط پایانی عمومی اتفاق نمیافتند. آنها اغلب در داخل نیز ظاهر میشوند. CI/CD سیستمها، مخازن مصنوعات یا میکروسرویسهایی که فایلهای آپلود شده را مدیریت میکنند. برای مثال، یک آسیبپذیری آپلود فایل در یک مدیر مصنوعات ساخت ممکن است به مهاجم اجازه دهد اسکریپتهای ساخت را بازنویسی کند یا تزریق فایلهای مخرب به دوندههای مشترک.
⚠️مثال ناامن، فقط برای اهداف آموزشی. در محیط عملیاتی استفاده نشود.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $FILENAME اعتبارسنجی نشده است، ساختگی است ../../../و غیره/گذرواژه مقدار میتواند فایلهای حیاتی سیستم را در حین استقرار، که یک حمله پیمایش مسیر در دنیای واقعی است، بازنویسی کند. نسخه امن:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" نکته آموزشی: In pipelines، تمام متغیرهای مسیر پویا را پاکسازی کنید. عملیات نوشتن را به دایرکتوریهای کنترلشده محدود کنید تا از فرار سیستم فایل در حین ساخت یا استقرار جلوگیری شود.
جلوگیری از پیمایش مسیر در منطق آپلود
کاهش خطرات پیمایش مسیر با اعتبارسنجی و جداسازی قوی ورودیها آغاز میشود. از همان ابتدا، به خصوص هنگام مدیریت فایلهای آپلود شده، نام فایلها و مسیرها را به عنوان ورودیهای غیرقابل اعتماد در نظر بگیرید.
بهترین روش
- عادیسازی و کانونیکالسازی قبل از استفاده از همه مسیرها، آنها را بررسی کنید.
- محدود کردن آپلودها به یک دایرکتوری اختصاصی خارج از ریشه وب.
- اعمال لیستهای مجاز برای پسوند فایلها و انواع MIME.
- هرگز از پوشههای موقت دوباره استفاده نکنید بین جلسات یا کاربران.
- از انبار کانتینری استفاده کنید برای فایلهای آپلود شده در صورت امکان.
چک لیست پیشگیرانه کوچک
- اعتبارسنجی هر نام فایل با تابع ()Path.GetFileName یا معادل آن
- مسیرهای کامل را حل کنید و مرزهای دایرکتوری را تأیید کنید.
- لیستهای مجاز افزونهها و MIME را اعمال کنید.
- برای هر کاربر یا جلسه از پوشههای آپلود جداگانه استفاده کنید.
- اسکن آپلود و اعتبارسنجی را در آن قرار دهید CI/CD آزمایشات
نکته آموزشی: هر کنترلکنندهی آپلود فایل، یک بردار حملهی پیمایش مسیر بالقوه است. با اعتبارسنجی، جداسازی و اسکن تمام کدهای مدیریت فایل، دفاع عمیقی ایجاد کنید.
چگونه Xygeni جریانهای آپلود ناامن را شناسایی و مسدود میکند
شیگنی Code Security اسکن پایگاههای کد و pipelineبرای تشخیص الگوهای پیمایش مسیر قبل از رسیدن به مرحله تولید. این ابزار، الحاق مسیرهای ناامن، عدم وجود استانداردسازی و عملیات فایل خطرناک را هم در کد و هم در فایل اجرایی، علامتگذاری میکند. CI/CD اسکریپت.
قطعه کد تابعی، به همراه محافظ کنترل:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk نکته آموزشی: ادغام شیگنی به شما pipeline تضمین میکند که آسیبپذیریهای آپلود فایل و حملات پیمایش مسیر به طور خودکار در طول اعتبارسنجی ساخت شناسایی شوند.
پر کردن شکاف: جلوگیری از حمله پیمایش مسیر بعدی شما
یک اشکال پیمایش تکمسیره در نقطه پایانی آپلود فایل میتواند به مهاجمان دسترسی به سیستم فایل سرور شما را بدهد. کنترلکنندههای آپلود را برای الحاقهای ناامن بررسی کنید، همه مسیرها را عادیسازی کنید و هرگز به نام فایلهای کنترلشده توسط کاربر اعتماد نکنید. اضافه کردن ابزارهای اسکن آسیب پذیری حرفه ای Xygeni Code Security خود را به DevSecOps pipeline برای تشخیص حملات پیمایش مسیر و آسیبپذیریهای آپلود فایل قبل از ارسال آنها. در امنیت، با هر فایل ذخیره شده باید به عنوان یک کد اجرا شده رفتار شود!






