فهرستهای OWASP Top 10 برای وب و OWASP API Security Top 10 مرجع جهانی رایجترین و خطرناکترین ضعفهای امنیتی نرمافزار هستند. در ادامه مهمترین موارد را با رویکرد عملی مرور میکنیم.
۱. کنترل دسترسی شکسته
شایعترین ضعف: کاربر با تغییر یک شناسه در آدرس به داده کاربر دیگر دسترسی پیدا میکند (IDOR/BOLA).
// ناامن
GET /api/orders/1052
// امن: همیشه مالکیت را در سرور بررسی کنید
$order = auth()->user()->orders()->findOrFail($id);
۲. خطاهای رمزنگاری
- همه ترافیک فقط روی HTTPS با HSTS
- ذخیره گذرواژه با الگوریتمهای کند و نمکدار مانند bcrypt یا Argon2
- عدم نگهداری داده حساس بدون نیاز
۳. تزریق (Injection)
SQL Injection، Command Injection و XSS همچنان رایجاند. از کوئریهای پارامتری، ORM، خروجی Escapeشده و Content Security Policy استفاده کنید.
۴. طراحی ناامن
برخی ضعفها با کدنویسی بهتر حل نمیشوند و ریشه در طراحی دارند؛ مثلاً نبود محدودیت تعداد تلاش در بازیابی رمز. مدل تهدید را پیش از توسعه انجام دهید.
۵. پیکربندی نادرست امنیتی
- حالت Debug در محیط عملیاتی خاموش باشد.
- فایلهای پیکربندی و محیط (مثل
.env) از طریق وب قابل دسترسی نباشند. - هدرهای امنیتی (CSP، X-Frame-Options، X-Content-Type-Options) تنظیم شوند.
- حسابها و گذرواژههای پیشفرض حذف شوند.
۶. اجزای آسیبپذیر و قدیمی
کتابخانهها و فریمورکها را بهروز نگه دارید و وابستگیها را بهطور خودکار برای آسیبپذیریهای شناختهشده بررسی کنید.
۷. ضعف احراز هویت
- احراز هویت چندعاملی برای حسابهای حساس
- محدودیت نرخ ورود و قفل موقت
- مدیریت امن نشست: کوکیهای HttpOnly، Secure و SameSite
ریسکهای ویژه API
- مصرف بیحد منابع: بدون Rate Limiting، API قربانی سوءاستفاده و هزینه میشود.
- Mass Assignment: فقط فیلدهای مجاز را از ورودی بپذیرید.
- افشای بیش از حد داده: پاسخ API فقط فیلدهای لازم را برگرداند، نه کل رکورد.
- مدیریت ضعیف موجودی API: نسخههای قدیمی و Endpointهای آزمایشی را شناسایی و خاموش کنید.
۸. لاگ و پایش ناکافی
بدون لاگ مناسب، نفوذ ممکن است ماهها کشف نشود. رویدادهای ورود، تغییر دسترسی و خطاهای غیرعادی را ثبت و پایش کنید.
امنیت اپلیکیشن باید بخشی از چرخه توسعه باشد، نه مرحلهای در پایان آن.