رابطهای برنامهنویسی کاربردی (API) راهی برای تعامل یک برنامه با برنامه دیگر هستند. API call یا درخواست API، پیامی است که به یک سرور ارسال میشود و از API درخواست ارائه خدمات یا اطلاعات میکند.
به عنوان مثال، اگر جان میزبان مهمانی بزرگی باشد، ممکن است با یک شرکت کترینگ تماس بگیرد و از آنها بخواهد غذایی برای مهمانی تهیه کنند. این کار به او کمک میکند تا زمان و تلاش زیادی را در تهیه غذا صرفهجویی کند. به همین ترتیب، یک برنامه میتواند برای دریافت داده یا عملکرد مورد نیاز خود به برنامه دیگری “تماس” بگیرد. این امر تضمین میکند که توسعهدهندگان نیازی به صرف زمان و تلاش برای ساخت قابلیتهای برنامهای که میتوانند از طریق API یکپارچه شوند، ندارند.
از آنجا که APIها در تقریباً تمام برنامههای وب امروز ادغام شدهاند، API callها در پسزمینه به طور مداوم انجام میشوند. فرض کنید کسی در یک وبسایت مسافرتی به دنبال بلیط اتوبوس باشد. وبسایت مسافرتی یک API call به سرورهای شرکتهای اتوبوس ارسال میکند و اطلاعاتی درباره سفرهای موجود و هزینه آنها دریافت میکند. از دید کاربر، این فرآیند باید تقریباً آنی باشد.
API callها به کجا میروند؟
API callها از یک کلاینت به یک API endpoint سفر میکنند. API endpoint مکانهایی هستند که API callها به آنها میروند، که معمولاً یک برنامه وب و یک سرور هستند. به عنوان مثال، یک کلاینت موبایل یک API call تولید میکند که به API endpoint، یعنی سرور، میرود. سرور API call را دریافت کرده، آن را پردازش میکند، درخواست را اجرا میکند و پاسخ را ارسال میکند.
زمانی که جان (از مثال قبلی) با شرکت کترینگ تماس میگیرد، این کار را با شمارهگیری یک شماره تلفن انجام میدهد. به همین ترتیب، API callها به یک شناسایی منبع یکنواخت (URI) هدایت میشوند.
URI یک روش استاندارد برای شناسایی یک منبع است، درست مانند اینکه یک شماره تلفن یک خط تلفن را شناسایی میکند. منبع شناساییشده میتواند یک وبسایت، یک برنامه، یک سرور، یک تماس ایمیلی یا حتی یک شیء واقعی باشد.
برای APIهای وب، معمولاً URI یک نشانهگذاری منبع یکنواخت (URL) است. URL نوعی از URI برای شناسایی مکانهای اینترنتی مانند یک وبسایت یا یک سرور است. URL باید شامل پروتکل لایه کاربردی، مانند HTTP، باشد که برای دسترسی به آن استفاده میشود. آدرسهای صفحات وب به صورت URL نوشته میشوند، مانند “https://www.cloudflare.com/learning." و API endpoint نیز URL هستند.
بیشتر APIهای وب از HTTP استفاده میکنند، بنابراین این پروتکل در URL اندپوینت API گنجانده میشود. به عنوان مثال، این اندپوینت اصلی API کلاودفلر “https://api.cloudflare.com/client/v4/" است. API callهای مبتنی بر HTTP از افعال HTTP (نوع درخواستها) مانند GET، POST و PUT برای نشان دادن خدمات یا منابع مورد نیاز از API endpoint استفاده میکنند.
چگونه میتوان از API callها برای حمله استفاده کرد؟
مانند هر چیزی که در معرض اینترنت قرار دارد، APIها در معرض حملات از منابع مختلف آسیبپذیر هستند. مهاجمان میتوانند از API callها به روشهای مختلف برای حمله به یک API استفاده کنند، از جمله:
- حملات عدم سرویس (DoS) و عدم سرویس توزیعشده (DDoS): این نوع حمله سرویس را برای سایر کاربران API انکار میکند. مهاجمان میتوانند با ارسال تعداد زیادی API call، یا ساختاردهی API callهای خود به گونهای که سرور را برای مدت طولانی مشغول کند، به API حمله کنند.
- استفاده از آسیبپذیریها: مهاجمان میتوانند سعی کنند API callهایی ارسال کنند که از نقصی در API بهرهبرداری کنند تا سرور را فریب دهند که دادههایی را که نباید فاش کند، ارائه دهد، به گونهای عمل کند که برای آن طراحی نشده است یا به آنها دسترسی غیرمجاز بدهد.
این حملات و دیگر حملات میتوانند تأثیر منفی بر سازمانهایی که خدمات API ارائه میدهند، داشته باشند.
چگونه میتوان APIها را از API callهای نامعتبر ایمن کرد؟
استراتژیهای زیر میتوانند به حفظ امنیت APIها کمک کنند:
- درک و پیگیری API endpoint: نگهداری یک لیست بهروز از تمام API endpoint در حال تولید.
- تأیید کلاینتهای API: احراز هویت تضمین میکند که API callها از یک کلاینت معتبر میآیند. چندین روش برای این کار وجود دارد، اما یکی از مؤثرترین آنها TLS متقابل است، که یک روش احراز هویت است که در آن هر API endpoint دیگری را با استفاده از رمزنگاری کلید عمومی تأیید میکند.
- اعتبارسنجی طرح API: طرح API مانند قوانین استفاده از آن است. اگر یک API call با طرح مطابقت نداشته باشد، ممکن است یک تلاش مخرب برای سوءاستفاده از API باشد. اعتبارسنجی طرح API به شناسایی و مسدود کردن API callهای نامعتبر کمک میکند.
- استفاده از کاهش DDoS: یک ارائهدهنده کاهش DDoS درخواستهای بیش از حد را مسدود یا جذب میکند تا سرور تحت فشار قرار نگیرد. کلاودفلر یکی از این ارائهدهندگان است.