در حال بارگذاری...
بررسی نحوه مدیریت خطاها در برنامه وب و شناسایی پیامهای خطای ناامن که اطلاعات حساس سیستم را فاش میکنند.
اهداف این درس
مدیریت خطا (Error Handling) فرآیند پیشبینی، تشخیص و پاسخ به خطاهایی است که در حین اجرای برنامه رخ میدهند. مدیریت نادرست خطاها یکی از رایجترین آسیبپذیریهای امنیتی است که میتواند اطلاعات حساس سیستم را به مهاجمان فاش کند.
مجموعهای از تکنیکها و رویهها برای مدیریت خطاهایی که در حین اجرای برنامه رخ میدهند، شامل تشخیص خطا، لاگبرداری و نمایش پیام مناسب به کاربر.
پیامهای خطای verbose میتوانند اطلاعات حساسی درباره سیستم فاش کنند. مهاجمان از این اطلاعات برای شناسایی آسیبپذیریها و طراحی حملات هدفمند استفاده میکنند.
هشدار
هرگز جزئیات فنی خطا مثل stack trace، نسخه نرمافزار، مسیر فایلها یا اطلاعات پایگاه داده را به کاربر نمایش ندهید. این اطلاعات میتوانند توسط مهاجمان سوءاستفاده شوند.
| نوع اطلاعات | مثال | خطر |
|---|---|---|
| نسخه نرمافزار | Apache/2.4.41, PHP/7.4.3 | شناسایی آسیبپذیریهای شناختهشده |
| مسیر فایلها | /var/www/html/config.php | شناسایی ساختار سرور |
| ساختار پایگاه داده | Table 'users' in 'app_db' | شناسایی جداول و فیلدها |
| Stack Trace | at line 45 in /app/auth.php | شناسایی کد منبع |
| اطلاعات سیستم | OS: Ubuntu 20.04, MySQL 8.0 | شناسایی محیط اجرا |
| کلیدها و رمزها | API Key: sk-1234... | دسترسی مستقیم به سرویسها |
تمام نقاطی که میتوانند خطا تولید کنند را شناسایی کنید: فرمهای ورودی، URLها، APIها، فایلهای آپلود و درخواستهای HTTP.
با ارسال ورودیهای نامعتبر، درخواستهای نادرست و دسترسی به منابع ناموجود، خطاها را تولید کنید و پیامهای بازگشتی را بررسی کنید.
1# خطای 404 - صفحه ناموجود2curl -v https://target.com/nonexistent-page34# خطای 500 - ورودی نامعتبر5curl -X POST https://target.com/api/login -d 'username=admin&password=\'\''67# خطای SQL Injection8https://target.com/search?q=' OR 1=1--910# خطای پردازش فایل11https://target.com/download?file=../../../etc/passwdبررسی کنید که آیا برنامه از صفحات خطای سفارشی استفاده میکند یا صفحات پیشفر�� سرور را نمایش میدهد. صفحات خطای پیشفرض معمولاً اطلاعات زیادی فاش میکنند.
نشت اطلاعات از طریق خطاها میتواند منجر به شناسایی آسیبپذیریهای سیستم، دسترسی غیرمجاز به اطلاعات، طراحی حملات هدفمند و بهرهبرداری از نقاط ضعف سیستم شود.
توصیه عملی
یک سیستم لاگبرداری متمرکز مثل ELK Stack یا Splunk پیادهسازی کنید تا خطاها را در سمت سرور لاگ کنید بدون آنکه جزئیات فنی به کاربر نمایش داده شود.
1try {2 const result = await db.query('SELECT * FROM users WHERE id = ?', [userId]);3 res.json(result);4} catch (error) {5 // لاگ کردن جزئیات در سرور6 logger.error('Database error:', {7 message: error.message,8 stack: error.stack,9 query: 'SELECT * FROM users',10 userId: userId11 });12 13 // نمایش پیام عمومی به کاربر14 res.status(500).json({15 error: 'خطایی رخ داد. لطفاً دوباره تلاش کنید.'16 });17}هرگز جزئیات فنی خطا را به کاربر نمایش ندهید.
پیامهای خطا نباید شامل stack trace، نسخه نرمافزار یا مسیر فایلها باشند.
خطاها باید در سمت سرور لاگ شوند اما به کاربر نمایش داده نشوند.
از صفحات خطای سفارشی برای محیط تولید استفاده کنید.
کدام پیام خطا اطلاعات حساس فاش میکند؟
چرا مدیریت نادرست خطاها خطرناک است؟
پیامهای خطای verbose میتوانند اطلاعات حساسی مثل ساختار پایگاه داده، مسیر فایلها، نسخه نرمافزار و حتی رمزهای عبور را فاش کنند. این اطلاعات به مهاجم کمک میکند تا حملات هدفمندتری انجام دهد.
تفاوت بین مدیریت خطا در محیط توسعه و تولید چیست؟
در محیط توسعه، نمایش جزئیات خطا برای دیباگ مفید است. اما در محیط تولید، باید فقط پیامهای عمومی به کاربر نمایش داده شود و جزئیات در لاگهای سرور ذخیره شوند.