در حال بارگذاری...
بررسی و شناسایی نشت Stack Trace در پیامهای خطا که اطلاعات حساسی درباره ساختار کد منبع و محیط اجرا فاش میکند.
اهداف این درس
Stack Trace (ردیاب پشته) یک گزارش مفصل از توابعی است که قبل از رخ دادن خطا فراخوانی شدهاند. این گزارش شامل مسیر فایلها، شماره خطوط، نام توابع و نوع exception است. Stack Trace ابزار مهمی برای دیباگ است اما نشت آن به کاربران یا مهاجمان خطرناک است.
گزارش مفصلی از توابعی که قبل از رخ دادن خطا فراخوانی شدهاند، شامل مسیر فایلها، شماره خطوط و نام توابع.
| نوع اطلاعات | مثال | خطر |
|---|---|---|
| مسیر فایل | /var/www/app/src/auth/LoginController.java | شناسایی ساختار پروژه |
| شماره خط | at line 45 | شناسایی دقیق کد آسیبپذیر |
| نام تابع | authenticateUser() | شناسایی منطق برنامه |
| نوع exception | java.lang.NullPointerException | شناسایی نوع خطا |
| پیام خطا | Connection refused to database | شناسایی زیرساخت |
| نسخه فریمورک | Spring Boot 2.5.0 | شناسایی آسیبپذیریها |
با ارسال ورودیهای نامعتبر، درخواستهای نادرست و دسترسی به منابع ناموجود، exceptionها را تولید کنید.
1# خطای SQL Injection2https://target.com/search?q=' OR 1=1--34# خطای Path Traversal5https://target.com/download?file=../../../etc/passwd67# خطای XML Injection8https://target.com/api/xml -d '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>'910# خطای JSON نامعتبر11curl -X POST https://target.com/api/data -H 'Content-Type: application/json' -d '{invalid json}'Stack Traceهای شناساییشده را تحلیل کنید تا اطلاعات حساس مثل مسیر فایلها، نسخه فریمورک و ساختار کد را شناسایی کنید.
1java.lang.NullPointerException: Cannot invoke method on null object2 at com.app.auth.LoginController.authenticate(LoginController.java:45)3 at com.app.auth.LoginController.doPost(LoginController.java:23)4 at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)5 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:231)6 at com.app.security.SecurityFilter.doFilter(SecurityFilter.java:67)1Traceback (most recent call last):2 File "/app/views/auth.py", line 45, in login3 user = db.query(User).filter_by(username=username).first()4 File "/app/models/database.py", line 23, in query5 return self.session.query(*args)6sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "db.internal.com" (10.0.0.5), port 5432 failed1System.NullReferenceException: Object reference not set to an instance of an object.2 at WebApp.Controllers.AccountController.Login(LoginViewModel model) in C:\Projects\WebApp\Controllers\AccountController.cs:line 453 at lambda_method(Closure , Object , Object[] )4 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)نشت Stack Trace میتواند منجر به شناسایی ساختار کد منبع، نسخه فریمورک، مسیر فایلها و آسیبپذیریهای احتمالی شود. این اطلاعات میتوانند برای طراحی حملات هدفمند استفاده شوند.
هشدار
حتی در محیط staging و تست هم Stack Trace نباید قابل دسترس عمومی باشد. مهاجمان ممکن است از محیطهای غیرتولیدی هم اطلاعات جمعآوری کنند.
1// در فایل web.config2<system.web>3 <customErrors mode="On" defaultRedirect="~/Error">4 <error statusCode="404" redirect="~/NotFound" />5 <error statusCode="500" redirect="~/ServerError" />6 </customErrors>7</system.web>89// در Program.cs10if (!app.Environment.IsDevelopment())11{12 app.UseExceptionHandler("/Error");13 app.UseHsts();14}توصیه عملی
از ابزارهای مانیتورینگ مثل Sentry، New Relic یا Application Insights برای لاگ کردن exceptionها در سمت سرور استفاده کنید. این ابزارها Stack Trace را بهصورت امن ذخیره میکنند و فقط برای تیم فنی قابل دسترس هستند.
Stack Trace شامل مسیر فایلها، شماره خطوط و نام توابع است.
نشت Stack Trace میتواند منجر به شناسایی آسیبپذیریهای کد منبع شود.
حالت Debug باید در محیط تولید غیرفعال باشد.
از custom error pages برای محیط تولید استفاده کنید.
Stack Trace معمولاً شامل کدام اطلاعات است؟
Stack Trace چیست و چرا نشت آن خطرناک است؟
Stack Trace اطلاعات مفصلی درباره خطا شامل مسیر فایلها، شماره خطوط، نام توابع و نوع exception است. نشت این اطلاعات به مهاجم کمک میکند تا ساختار کد منبع را شناسایی کند و حملات هدفمندتری انجام دهد.
چگونه از نشت Stack Trace جلوگیری کنیم؟
حالت Debug را در محیط تولید غیرفعال کنید، از custom error pages استفاده کنید، exceptionها را در سمت سرور لاگ کنید و فقط پیامهای عمومی به کاربر نمایش دهید.