در یکی از پرونده‌های امنیتی که سال گذشته روی آن کار می‌کردم، یک پلتفرم SaaS با افشای داده روبرو شده بود. مشکل از یک endpoint API بود که سفارش‌های کاربران را برمی‌گرداند، اما بررسی نمی‌کرد که سفارش درخواستی متعلق به همان کاربر است یا نه. مهاجم با تغییر عدد سفارش در URL، به سفارش‌های هزاران کاربر دیگر دسترسی پیدا کرده بود. این آسیب‌پذیری که BOLA (Broken Object Level Authorization) نامیده می‌شود، امروز رتبه اول OWASP API Security Top 10 را به خود اختصاص داده است. این تجربه نشان می‌دهد که امنیت API (Application Programming Interface) با امنیت وب‌سایت‌های سنتی تفاوت‌های بنیادین دارد و نیازمند رویکرد ویژه‌ای است. در این مقاله، این حوزه را بر اساس تجربه‌های مهندسی بررسی می‌کنم.

طبق گزارش Salt Security API Security Report 2024، بیش از ۹۱ درصد از سازمان‌ها در سال گذشته با مشکل امنیت API مواجه شده‌اند. طبق گزارش Akamai API Security Report، حملات به API با رشد ۱۶۷ درصدی روبرو بوده و بیش از ۴۰ درصد از حملات به API از طریق احراز هویت معیوب انجام شده. طبق گزارش Postman State of the API 2024، بیش از ۸۳ درصد از APIها در سطح دنیا از REST استفاده می‌کنند و اکثر آنها بدون احراز هویت قوی و Rate Limiting کار می‌کنند. این آمارها نشان می‌دهد که امنیت API به یکی از پرچالش‌ترین حوزه‌های امنیت وب تبدیل شده است. اگر با مفاهیم پایه‌ای API آشنا نیستید، پیشنهاد می‌کنم ابتدا REST API چیست و اصول طراحی REST API را مطالعه کنید.

امنیت API در یک تعریف دقیق

امنیت API به مجموعه‌ای از رویه‌ها، استانداردها و ابزارها گفته می‌شود که هدفشان حفاظت از APIها در برابر تهدیدات سایبری است. این مفهوم، سه سطح اصلی را پوشش می‌دهد: اول، امنیت سطح احراز هویت (Authentication) که پاسخ به سؤال "کاربر کیست" است. دوم، امنیت سطح مجوزدهی (Authorization) که پاسخ به سؤال "کاربر چه کاری می‌تواند انجام دهد" است. سوم، امنیت سطح داده (Data Security) که شامل رمزنگاری، اعتبارسنجی ورودی و محافظت از خروجی است.

نکته مهم این است که APIها، برخلاف وب‌سایت‌های سنتی، اغلب داده‌های خام را منتقل می‌کنند، نه HTML. این یعنی مهاجم می‌تواند مستقیماً به داده دسترسی داشته باشد، بدون نیاز به تجزیه HTML. همچنین APIها اغلب توسط اپلیکیشن‌های شخص ثالث (Third-Party Applications) مصرف می‌شوند که تحت کنترل مستقیم شما نیستند. این ویژگی‌ها، امنیت API را پیچیده‌تر از امنیت وب‌سایت‌های سنتی می‌کند.

از منظر مهندسی، امنیت API را می‌توان به عنوان یک سیستم چندلایه در نظر گرفت که هر لایه، مجموعه‌ای از کنترل‌ها را برای مقابله با تهدیدات خاص پیاده می‌کند. این مفهوم در اصل Defense in Depth (دفاع در عمق) خلاصه می‌شود. اگر با مفاهیم پایه‌ای امنیت آشنا نیستید، امنیت وب چیست و استانداردهای امنیت وب را مطالعه کنید.

API، دروازه کسب‌وکار شماست. هر API بدون احراز هویت قوی، مثل یک در باز در دیوار شهر است. مهاجم از همان‌جا وارد می‌شود.

تفاوت امنیت API با امنیت وب سنتی

امنیت API با امنیت وب‌سایت‌های سنتی تفاوت‌های بنیادین دارد که درک آنها برای طراحی درست حیاتی است. سه تفاوت اصلی: سطح حمله، فرمت داده و مخاطب.

سطح حمله: در وب‌سایت‌های سنتی، سطح حمله شامل صفحات HTML، فرم‌ها و فایل‌های استاتیک است. در APIها، سطح حمله شامل هر endpoint، هر پارامتر، هر هدر و هر متد HTTP است. یعنی تعداد نقاط ورود بسیار بیشتر است. همچنین APIها اغلب از طریق برنامه‌نویسی (نه مرورگر) مورد حمله قرار می‌گیرند که ابزارهای امنیتی سنتی قادر به شناسایی آنها نیستند.

فرمت داده: در وب‌سایت‌های سنتی، داده به صورت HTML منتقل می‌شود که خودش شامل مکانیزم‌های امنیتی مثل Same-Origin Policy است. در APIها، داده اغلب به صورت JSON یا XML منتقل می‌شود که این مکانیزم‌ها را ندارد. JSON ذاتاً امن است، اما اگر به‌درستی پردازش نشود، می‌تواند منجر به آسیب‌پذیری‌های جدید مثل JSON Injection شود.

مخاطب: در وب‌سایت‌های سنتی، مخاطب اصلی انسان است. در APIها، مخاطب اصلی اپلیکیشن‌های دیگر است که تحت کنترل مستقیم شما نیستند. این یعنی مهاجم می‌تواند یک اپلیکیشن مخرب بسازد که به API شما درخواست می‌فرستد. در این حالت، مکانیزم‌های امنیتی سنتی مثل CSRF Token کار نمی‌کنند.

اگر با REST API آشنا نیستید، احراز هویت در REST API و اصول طراحی REST API را مطالعه کنید. همچنین اگر به معماری میکروسرویس علاقه‌مندید، تفاوت معماری مونولیتیک و میکروسرویس دیدگاه مکملی ارائه می‌دهد.

OWASP API Security Top 10

OWASP API Security Top 10 یک مرجع مهم برای آسیب‌پذیری‌های امنیتی APIهاست که در نسخه ۲۰۲۳ منتشر شده. این لیست، ده آسیب‌پذیری بحرانی APIها را تعریف می‌کند که در پروژه‌های مختلف با آنها روبرو می‌شوم.

کدآسیب‌پذیریمثال
API1Broken Object Level Authorizationدسترسی به سفارش کاربر دیگر
API2Broken Authenticationاحراز هویت معیوب با JWT نامعتبر
API3Broken Object Property Level Authorizationدسترسی به فیلدهای حساس
API4Unrestricted Resource Consumptionنبود Rate Limiting
API5Broken Function Level Authorizationدسترسی به endpointهای admin
API6Unrestricted Access to Sensitive Business Flowsسوءاستفاده از فرم‌های حساس
API7Server Side Request Forgeryدسترسی سرور به منابع داخلی
API8Security Misconfigurationپیش‌فرض‌های ناامن
API9Improper Inventory ManagementAPIهای قدیمی نصب‌شده
API10Unsafe Consumption of APIsاعتماد بی‌جا به APIهای خارجی

نکته مهم: سه آسیب‌پذیری اول (API1، API2، API3) به طور مستقیم با احراز هویت و مجوزدهی مرتبط هستند و در سال‌های اخیر مسئول بیش از ۶۰ درصد از حملات به API بوده‌اند. این آمار نشان می‌دهد که تمرکز بر احراز هویت و مجوزدهی، مؤثرترین سرمایه‌گذاری در امنیت API است. اگر با انواع آسیب‌پذیری‌های وب آشنا نیستید، انواع آسیب‌پذیری‌های رایج وب و آسیب‌پذیری وب چیست را بخوانید.

BOLA و BOPLA؛ رتبه اول تهدیدات

BOLA (Broken Object Level Authorization) یکی از پرخطرترین آسیب‌پذیری‌های API است که در OWASP API Security Top 10 رتبه اول را به خود اختصاص داده. این آسیب‌پذیری زمانی رخ می‌دهد که API، کاربر را احراز هویت می‌کند اما بررسی نمی‌کند که آیا این کاربر مجاز به دسترسی به منبع درخواستی هست یا نه.

نمونه یک endpoint آسیب‌پذیر:

GET /api/orders/12345
Authorization: Bearer 

اگر API بررسی کند که توکن معتبر است اما بررسی نکند که سفارش ۱۲۳۴۵ متعلق به همان کاربر است، مهاجم می‌تواند با تغییر عدد سفارش (مثلاً ۱۲۳۴۶)، به سفارش کاربر دیگر دسترسی پیدا کند. این نوع حمله را IDOR (Insecure Direct Object Reference) نیز می‌نامند.

راه‌حل BOLA: بررسی دقیق دسترسی در سطح منبع. یعنی هر بار که کاربر به یک منبع درخواست دسترسی می‌کند، سرور باید بررسی کند که آیا این کاربر مالک یا مجاز به دسترسی به این منبع است یا نه. این بررسی نباید به کلاینت سپرده شود.

// نمونە در PHP
$orderId = $_GET["order_id"];
$userId = get_current_user_id();

// بررسی مالکیت
$order = $db->prepare(
    "SELECT * FROM orders WHERE id = ? AND user_id = ?"
);
$order->execute([$orderId, $userId]);

if ($order->rowCount() === 0) {
    http_response_code(403);
    exit("Access denied");
}

BOPLA (Broken Object Property Level Authorization) مشابه BOLA است، اما در سطح فیلد (Property) نه در سطح منبع. مثلاً کاربر مجاز به دیدن سفارش خودش است، اما نباید فیلدهای حساس مثل اطلاعات کارت اعتباری را ببیند. راه‌حل BOPLA: Output Filtering با Allowlist. یعنی فقط فیلدهای مجاز را در پاسخ قرار دهید. اگر با REST API و Idempotency آشنا نیستید، اصول طراحی REST API و نسخه‌بندی REST API را مطالعه کنید.

احراز هویت قوی در API

احراز هویت قوی، پایه امنیت API است. سه رویکرد اصلی: API Key، OAuth 2.0 و JWT (JSON Web Token). هر رویکرد، نقاط قوت و ضعف خودش را دارد و انتخاب باید بر اساس سناریو باشد.

API Key: ساده‌ترین رویکرد است. مزیت: سادگی پیاده‌سازی و کارایی بالا. عیب: اگر لو برود، مهاجم به همه دسترسی‌ها دست پیدا می‌کند. مناسب برای APIهای داخلی و بین‌سرویسی.

OAuth 2.0: استانداردترین رویکرد است. مزیت: امکان اعطای دسترسی محدود (Scoped Access)، امکان ابطال توکن، و امکان Refresh Token. عیب: پیچیدگی پیاده‌سازی. مناسب برای APIهای عمومی و جدی.

JWT: توکن خودتوصیف (Self-Contained) است. مزیت: Stateless است و نیازی به ذخیره session در سرور ندارد. عیب: ابطال توکن دشوار است. مناسب برای APIهای موبایل و معماری‌های توزیع‌شده.

نکات مهم در احراز هویت API: اول، همیشه از HTTPS استفاده کنید. دوم، توکن‌ها را با عمر کوتاه (۱۵ دقیقه تا ۱ ساعت) صادر کنید. سوم، از Refresh Token برای دریافت توکن جدید استفاده کنید. چهارم، توکن‌ها را در HttpOnly Cookie یا در حافظه (Memory) نگهداری کنید، نه در LocalStorage. پنجم، از MFA (Multi-Factor Authentication) برای حساب‌های حساس استفاده کنید. اگر با جزئیات احراز هویت API آشنا نیستید، احراز هویت در REST API و JWT چیست را مطالعه کنید.

مجوزدهی سطح منبع

مجوزدهی سطح منبع (Object Level Authorization) بخش جدانشدنی امنیت API است. سه مدل رایج مجوزدهی: RBAC (Role-Based Access Control)، ABAC (Attribute-Based Access Control) و Scope.

RBAC: هر کاربر یک یا چند نقش (Role) دارد و هر نقش مجموعه‌ای از مجوزها دارد. مثلاً نقش admin به همه چیز دسترسی دارد، نقش editor به محتوا، و نقش viewer فقط به خواندن. مناسب برای اکثر اپلیکیشن‌ها.

ABAC: بر اساس ویژگی‌های کاربر، منبع، عملیات و شرایط تصمیم می‌گیرد. مثلاً کاربران می‌توانند فقط سفارش‌های خودشان را ببینند؛ این تصمیم بر اساس ویژگی owner بودن کاربر روی منبع گرفته می‌شود. مناسب برای سیستم‌های پیچیده.

Scope: مدل رایج در OAuth 2.0 است. هر Access Token با یک یا چند Scope (مثل read:users، write:orders) صادر می‌شود و کلاینت فقط می‌تواند در محدوده این Scopeها عمل کند. مناسب برای APIهای عمومی.

// نمونە در PHP با RBAC
if (!current_user_can("edit_posts")) {
    http_response_code(403);
    exit("Access denied");
}

// نمونە ABAC
if ($post->author_id !== get_current_user_id()) {
    http_response_code(403);
    exit("You can only edit your own posts");
}

نکات مهم درباره مجوزدهی: اول، مجوزدهی باید در سطح endpoint و در سطح منبع بررسی شود. دوم، مجوزدهی نباید به کلاینت سپرده شود. سوم، مجوزدهی باید در سطح هر درخواست انجام شود، نه فقط در زمان لاگین. چهارم، در سیستم‌های چند-نقشی، مرزهای مجوزدهی باید به‌روشنی تعریف شوند. اگر با تفاوت احراز هویت و مجوزدهی آشنا نیستید، تفاوت احراز هویت و مجوزدهی و بهترین روش‌های احراز هویت را بخوانید.

Rate Limiting و مدیریت منابع

Rate Limiting یا محدودسازی نرخ، یکی از مکانیزم‌های حیاتی امنیت API است. بدون Rate Limiting، یک کلاینت نادرست یا مهاجم می‌تواند با ارسال درخواست‌های زیاد، سرویس را از کار بیندازد یا منابع را مصرف کند.

سه الگوریتم رایج برای Rate Limiting: Fixed Window، Sliding Window و Token Bucket. الگوریتم Token Bucket انعطاف‌پذیرترین است و به Burst درخواست‌ها اجازه می‌دهد. هدرهای استاندارد برای Rate Limiting شامل X-RateLimit-Limit، X-RateLimit-Remaining، X-RateLimit-Reset و Retry-After است.

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1674388800
Retry-After: 60

نکات مهم در Rate Limiting: اول، محدودیت را بر اساس هویت کلاینت (API Key یا توکن) تعیین کنید، نه بر اساس IP. دوم، محدودیت‌های متفاوت برای endpointهای مختلف داشته باشید (endpointهای سنگین‌تر، محدودیت کمتری داشته باشند). سوم، در پاسخ 429، اطلاعات کافی برای retry صحیح ارائه دهید. چهارم، از Rate Limiting در سطح Gateway استفاده کنید تا از APIهای اصلی جدا شود. اگر با معماری میکروسرویس آشنا نیستید، اصول طراحی معماری وب مدرن و تفاوت معماری وب و نرم‌افزار را مطالعه کنید.

Input Validation و Output Filtering

Input Validation و Output Filtering دو لایه دفاعی مکمل در امنیت API هستند. Input Validation، بررسی می‌کند که ورودی با فرمت مورد انتظار مطابقت دارد یا نه. Output Filtering، بررسی می‌کند که پاسخ فقط شامل فیلدهای مجاز است.

Input Validation در API، شامل: بررسی Content-Type، بررسی Schema JSON (با JSON Schema)، بررسی طول رشته‌ها، بررسی محدوده اعداد، و بررسی الگوهای Regex. ابزارهایی مثل AJV (در Node.js)، Cerberus (در Python) و Respect Validation (در PHP) این کار را ساده می‌کنند.

// نمونە JSON Schema
{
  "type": "object",
  "required": ["email", "age"],
  "properties": {
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 18, "maximum": 120 }
  },
  "additionalProperties": false
}

Output Filtering در API، شامل: حذف فیلدهای حساس (مثل پسورد_hash، api_key، internal_id)، حذف اطلاعاتی که کاربر مجاز به دیدن آن نیست، و ساختاردهی پاسخ در قالب مشخص. یک اشتباه رایج، بازگرداندن کامل آبجکت دیتابیس در پاسخ API است که منجر به افشای فیلدهای داخلی می‌شود.

نکات مهم درباره Input Validation و Output Filtering: اول، Validation باید در سمت سرور انجام شود، نه فقط سمت کلاینت. دوم، Validation باید Allowlist باشد، نه Blacklist. سوم، Output Filtering باید با Allowlist باشد، یعنی فقط فیلدهای مجاز را در پاسخ قرار دهید. چهارم، در APIهای عمومی، هر endpoint باید Schema مشخصی داشته باشد که در OpenAPI تعریف شده باشد. اگر با OpenAPI آشنا نیستید، راهنمای مستندسازی API و مستندسازی REST API با Swagger را مطالعه کنید.

Output Filtering، محافظت از خودتان در برابر اشتباهات خودتان است. اگر همه فیلدهای آبجکت را برمی‌گردانید، یک اشتباه در مدل دیتابیس می‌تواند فاجعه باشد.

mTLS و امنیت Service-to-Service

mTLS (Mutual TLS) یکی از رویکردهای پیشرفته امنیت API است که در معماری‌های میکروسرویس و سناریوهای Service-to-Service بسیار مؤثر است. در این رویکرد، هم کلاینت و هم سرور یکدیگر را با گواهی دیجیتال احراز هویت می‌کنند.

مزایای mTLS: اول، احراز هویت قوی در سطح شبکه. دوم، عدم نیاز به مدیریت توکن. سوم، مناسب برای معماری Zero Trust. چهارم، استانداردسازی شده و در Service Meshها مثل Istio و Linkerd پشتیبانی می‌شود. عیب‌های آن: پیچیدگی مدیریت گواهی‌ها (Certificate Rotation، Revocation) و نیاز به زیرساخت PKI (Public Key Infrastructure).

در ۲۰۲۶، mTLS به تدریج به استاندارد در معماری‌های میکروسرویس تبدیل می‌شود. طبق گزارش Istio، بیش از ۷۰ درصد از سازمان‌هایی که از Service Mesh استفاده می‌کنند، mTLS را در ارتباطات داخلی خود پیاده‌سازی کرده‌اند. این رویکرد، به ویژه در محیط‌های ابری و چند-کلاودی بسیار ارزشمند است.

نکات مهم درباره mTLS: اول، از CA داخلی برای مدیریت گواهی‌ها استفاده کنید. دوم، Certificate Rotation را خودکار کنید. سوم، از SPIFFE یا مشابه آن برای شناسایی سرویس‌ها استفاده کنید. چهارم، در HTTP/2 و HTTP/3، mTLS کارایی بهتری دارد. اگر با زیرساخت سرور آشنا نیستید، سرور چیست و چگونه کار می‌کند و افزایش امنیت سرور را بخوانید.

Logging، Monitoring و Anomaly Detection

Logging، Monitoring و Anomaly Detection بخش جدانشدنی امنیت API هستند. بدون پایش، حتی موفق‌ترین حملات می‌توانند هفته‌ها یا ماه‌ها بی‌سر و صدا بمانند.

Logging: ثبت رویدادهای امنیتی مهم. شامل: تلاش‌های ناموفق احراز هویت، درخواست‌های مشکوک، خطاهای ۴xx و ۵xx، درخواست‌های با فیلدهای غیرمجاز، و درخواست‌های از IPهای مشکوک. لاگ‌ها باید در یک محل مرکزی ذخیره شوند که در دسترس مهاجم نباشند.

Monitoring: پایش مداوم متریک‌های API. شامل: تعداد درخواست در ثانیه، میانگین زمان پاسخ، نرخ خطا، و نرخ درخواست‌های مسدودشده. ابزارهایی مثل Prometheus، Grafana و Datadog در این حوزه مفید هستند.

Anomaly Detection: شناسایی الگوهای غیرعادی در ترافیک API. شامل: ناگهان افزایش درخواست از یک IP، درخواست‌های با payload غیرمعمول، و الگوهای رفتاری مشکوک. ابزارهایی مثل Cloudflare Bot Management، AWS GuardDuty و Datadog Security در این حوزه پرکاربردند.

نکات مهم در پایش: اول، همه رویدادهای امنیتی مهم را لاگ کنید. دوم، لاگ‌ها را در محل مرکزی ذخیره کنید که در دسترس مهاجم نباشد. سوم، از SIEM (Security Information and Event Management) برای تحلیل لاگ‌ها استفاده کنید. چهارم، هشدارهای Real-time برای رویدادهای بحرانی تنظیم کنید. اگر با ابزارهای پایش سرور آشنا نیستید، مقایسه ابزارهای مانیتورینگ سرور و بررسی لاگ‌های دیتابیس را مطالعه کنید.

Zero Trust در معماری API

مدل Zero Trust در معماری API، به معنای اعتماد نداشتن به هیچ درخواست، حتی از داخل شبکه است. در این مدل، هر درخواست باید مستقل احراز هویت، مجوزدهی و اعتبارسنجی شود، بدون توجه به منبع آن.

اصول Zero Trust در API: اول، احراز هویت مداوم (Continuous Authentication) که شامل بررسی توکن در هر درخواست است. دوم، Least Privilege Access که هر کلاینت فقط به منابعی که نیاز دارد دسترسی دارد. سوم، Micro-segmentation که دسترسی‌ها را در سطح شبکه محدود می‌کند. چهارم، پایش مداوم که هر درخواست مشکوک را شناسایی می‌کند. پنجم، فرض بر نقض (Assume Breach) به جای فرض بر امنیت.

پیاده‌سازی Zero Trust در APIها شامل سه لایه است: لایه احراز هویت (Authentication) که با JWT، OAuth 2.0 یا mTLS انجام می‌شود. لایه مجوزدهی (Authorization) که با RBAC، ABAC یا Scope انجام می‌شود. لایه پایش (Monitoring) که شامل Logging، Rate Limiting و Anomaly Detection است. این رویکرد در معماری‌های ابری و میکروسرویس بسیار مؤثر است. اگر با معماری میکروسرویس آشنا نیستید، تفاوت معماری مونولیتیک و میکروسرویس و معماری وب برای استارتاپ‌ها را مطالعه کنید.

تست امنیت API

تست امنیت API بخشی جدانشدنی از استراتژی مقابله است. سه رویکرد اصلی: تست دستی، تست خودکار و Bug Bounty.

تست دستی: با استفاده از Postman یا curl، سناریوهای حمله مختلف را تست کنید. شامل: تغییر پارامترها برای بررسی BOLA، تست JWT با signature معیوب، بررسی Rate Limiting، و تست Injection در پارامترهای مختلف. اگر با Postman آشنا نیستید، تست REST API با Postman را مطالعه کنید.

تست خودکار: ابزارهایی مثل OWASP ZAP، Burp Suite Scanner، Postman Collections و Rest Assured، امنیت API را به طور خودکار تست می‌کنند. این ابزارها را می‌توانید در CI/CD pipeline قرار دهید تا در هر commit اجرا شوند. اگر با CI/CD آشنا نیستید، مقایسه ابزارهای CI/CD و گیت در وردپرس را بخوانید.

Bug Bounty: برای APIهای عمومی، برنامه Bug Bounty یکی از مؤثرترین راه‌های شناسایی آسیب‌پذیری است. طبق آمار HackerOne، APIها یکی از پرگزارش‌ترین حوزه‌هاست. اگر پروژه شما عمومی است، یک برنامه Bug Bounty روی پلتفرم‌هایی مثل HackerOne، Bugcrowd یا YesWeHack راه‌اندازی کنید.

نکات مهم در تست امنیت API: اول، همه endpointها را تست کنید، نه فقط endpointهای اصلی. دوم، همه متدهای HTTP را تست کنید، نه فقط GET و POST. سوم، Payload‌های مختلف را در همه پارامترها تست کنید. چهارم، نتایج تست را مستند کنید و برای رفع آسیب‌پذیری، اولویت‌بندی کنید. اگر با تست امنیت وب آشنا نیستید، تست امنیت وب‌سایت و اسکنرهای آسیب‌پذیری وب را مطالعه کنید.

پرسش‌های پرتکرار درباره امنیت API

آیا JWT امن است؟ JWT ذاتاً امن است، اما استفاده نادرست از آن می‌تواند منجر به آسیب‌پذیری شود. سه اشتباه رایج: عدم اعتبارسنجی signature، استفاده از الگوریتم none، و ذخیره اطلاعات حساس در Payload. اگر به‌درستی استفاده شود، JWT یکی از امن‌ترین روش‌های احراز هویت API است.

آیا API Key برای APIهای عمومی مناسب است؟ API Key برای APIهای داخلی و سیستم‌های بین‌سرویسی می‌تواند مناسب باشد. اما برای APIهای عمومی، به تنهایی امن نیست، چون اگر لو برود، مهاجم به همه دسترسی‌ها دست پیدا می‌کند. API Key باید با یک لایه اضافی مثل IP Allowlist ترکیب شود.

چگونه BOLA را تشخیص دهم؟ در همه endpointهایی که با شناسه منبع (مثل id سفارش یا id کاربر) کار می‌کنند، بررسی کنید که آیا سرور مالکیت منبع را چک می‌کند یا نه. یک تست ساده: با توکن کاربر A، به سفارش کاربر B درخواست بفرستید. اگر پاسخ برگشت، BOLA وجود دارد.

آیا OAuth 2.0 تنها راه امن برای APIهای عمومی است؟ خیر. OAuth 2.0 استانداردترین راه است، اما روش‌های دیگری مثل WebAuthn و mTLS نیز می‌توانند برای سناریوهای خاص مناسب باشند. انتخاب باید بر اساس نیاز پروژه و پیچیدگی مورد قبول باشد.

آیا mTLS برای همه پروژه‌ها مناسب است؟ mTLS برای معماری‌های میکروسرویس و سناریوهای Service-to-Service بسیار مؤثر است. اما برای اپلیکیشن‌های عمومی (وب یا موبایل)، پیچیدگی مدیریت گواهی‌ها می‌تواند بیش از حد باشد. در این سناریوها، OAuth 2.0 یا JWT انتخاب‌های بهتری هستند.

چگونه Rate Limiting را در معماری میکروسرویس پیاده کنم؟ بهترین رویکرد، پیاده‌سازی Rate Limiting در API Gateway است، نه در هر سرویس. ابزارهایی مثل Kong، Tyk، Istio و AWS API Gateway از این قابلیت پشتیبانی می‌کنند.

آیا تست خودکار می‌تواند همه آسیب‌پذیری‌های API را شناسایی کند؟ خیر. تست خودکار بخش بزرگی از آسیب‌پذیری‌های شناخته‌شده را شناسایی می‌کند، اما آسیب‌پذیری‌های منطق کسب‌وکار (مثل BOLA) معمولاً نیاز به تست دستی دارند. بهترین رویکرد، ترکیب تست خودکار با Code Review دستی و Bug Bounty است.

آنچه باید با خود ببرید

امنیت API یک حوزه پیچیده و چندلایه است که از احراز هویت و مجوزدهی تا Rate Limiting، Input Validation، mTLS و پایش مداوم را پوشش می‌دهد. OWASP API Security Top 10 مرجع اصلی آسیب‌پذیری‌های API است و BOLA (Broken Object Level Authorization) رتبه اول تهدیدات را به خود اختصاص داده.

هفت اصل کلیدی که در این مقاله بررسی شد:

  1. مجوزدهی سطح منبع (Object Level) ضروری است و نباید به کلاینت سپرده شود.
  2. احراز هویت قوی با JWT، OAuth 2.0 یا mTLS، پایه امنیت API است.
  3. Rate Limiting بر اساس هویت کلاینت، سرویس را از سوءاستفاده محافظت می‌کند.
  4. Input Validation و Output Filtering، دو لایه دفاعی مکمل هستند.
  5. mTLS رویکرد پیشرفته برای امنیت Service-to-Service است.
  6. پایش مداوم و Anomaly Detection، حادثات را زود تشخیص می‌دهد.
  7. Zero Trust در معماری API، رویکرد پیشنهادی در محیط‌های ابری است.

قدم عملی امروز: به APIهای موجود خود نگاه کنید و سه بررسی انجام دهید. اول، آیا BOLA در endpointهای حساس (سفارش، پروفایل، پیام) وجود دارد؟ دوم، آیا JWT با اعتبارسنجی signature استفاده می‌شود؟ سوم، آیا Rate Limiting فعال است؟ این سه بررسی، بخش بزرگی از OWASP API Security Top 10 را پوشش می‌دهد. اگر می‌خواهید عمیق‌تر شوید، احراز هویت در REST API و امنیت API را مطالعه کنید.

اگر تجربه‌ای در پیاده‌سازی امنیت API در پروژه‌های واقعی داشتید — به‌خصوص اگر با BOLA یا یک حمله پیچیده مواجه شده‌اید — در دیدگاه‌ها بنویسید. این تجربه‌ها برای خواننده‌های بعدی از هر مقاله تئوریک ارزشمندتر است. 🔐