همه ما دوست داریم فرض کنیم که APIهایمان امن هستند، زیرا این اجازه میدهد با وجدان راحت از APIهایمان استفاده کنیم. واقعیت ناخوشایند این است که APIهای ما همیشه به اندازهای که دوست داریم تظاهر کنیم، ایمن نیستند. میتوانیم آنها را امن کنیم، اما نیاز است به روش درست تنظیم شوند تا بازیگران بد نیت از APIهای شما سوءاستفاده نکنند. جلوگیری از دسترسی غیرمجاز به API مهمتر از همیشه است. طبق گزارش وضعیت حفاظت از برنامههای وب و API در سال ۲۰۲۴ از CDNetworks، پلتفرم امنیت سایبری ۸۸۷.۴ میلیارد تلاش حمله به برنامههای وب و APIها را در سطح جهانی در سال ۲۰۲۴ شناسایی کرد، که ۲۱.۴ درصد افزایش نسبت به سال ۲۰۲۳ است. حتی هشداردهندهتر، ۷۸ درصد از آن حملات پس از احراز هویت رخ دادهاند. واضح است که فقط تمرکز بر احراز هویت کافی نیست. خبر خوب این است که دسترسی غیرمجاز به API میتواند تقریباً به طور کامل حذف شود، حتی اگر توکن دسترسی داشته باشند. ما قصد داریم نکات و بهترین شیوههایی را برای جلوگیری از دسترسی غیرمجاز به API به اشتراک بگذاریم تا تضمین کنیم APIهای شما تا حد ممکن امن هستند.
استفاده از احراز هویت و مجوزدهی مناسب (Proper Authentication and Authorization)
با اصول اولیه شروع میکنیم و سپس به روشهای پیچیدهتر و جامعتر برای جلوگیری از مجوزدهی API میپردازیم، حتی اگر کسی کلید API یا توکن دسترسی داشته باشد. برای شروع، هر API باید نوعی احراز هویت داشته باشد، حتی اگر فقط برای استفاده داخلی در نظر گرفته شده باشد. نه تنها احراز هویت و مجوزدهی به ردیابی کسانی که به API دسترسی دارند کمک میکند، بلکه به توسعهدهندگان API اجازه میدهد تعیین کنند که به چه منابعی دسترسی دارند. استانداردهای صنعتی مانند OAuth 2.0 و OpenID Connect راههایی برای دیکته کردن دسترسی بدون نیاز به انتقال مکرر توکنهای دسترسی یا وارد کردن رمزهای عبور ایجاد میکنند. نقاط پایانی حساس نیز نیاز به امنیت اضافی دارند، مانند احراز هویت چندعاملی (MFA).
استفاده از محدودیت نرخ و کنترل ترافیک (Rate Limiting and Throttling)
محدودیت نرخ و کنترل ترافیک تاکتیکهای اساسی امنیت API هستند که همچنان نقش مهمی در جلوگیری از دسترسی غیرمجاز به API ایفا میکنند. بازیگران مخرب میتوانند امنیت API را با ارسال درخواستهای بیش از حد خاموش کنند، چه از طریق حملات انکار سرویس یا حملات brute-force. محدودیت نرخ و کنترل ترافیک یک توقف مفید در برابر این تهدیدها فراهم میکنند و سقفی بر تعداد درخواستهایی که یک کاربر خاص میتواند در دوره زمانی مشخصی ارسال کند، قرار میدهند. محدودیتهای نرخ همچنین میتوانند بر اساس نقش یا سطح دسترسی کاربر خاص دیکته شوند، که این امر اختلالات یا محدودیتهای خدماتی را کاهش میدهد که مانع از مفید بودن API میشود.
اعتبارسنجی تمام ورودیها (Validate All Inputs)
حملهکنندگان اغلب نقاط پایانی و منابع API را با تزریق ورودیهای خطرناک، مانند دستورات SQL یا اسکریپتها، برای دستکاری سیستم backend بهرهبرداری میکنند. اعتبارسنجی ورودی این ریسک را با ارزیابی هر فراخوانی API، بررسی انواع، اعمال محدودیتهای طول، تأیید فرمتها و پاکسازی ورودی برای حذف کاراکترها یا الگوهای خطرناک، حذف میکند. ابزارهای اعتبارسنجی schema مانند JSON schema یا XML schema به اتوماتیک کردن این فرآیند کمک میکنند و تضمین میکنند که تمام ورودیها و خروجیهای API به طور مناسب فرمتبندی شوند.
رمزنگاری ترافیک API با TLS
رمزنگاری لایه حملونقل در اکوسیستم API مهم است. بهترین شیوه مهم دیگری برای جلوگیری از دسترسی غیرمجاز به API، رمزنگاری تمام ترافیک API با HTTPS و یک امنیت لایه حملونقل (TLS) مدرن است. این امر از حملات man-in-the-middle جلوگیری میکند، جایی که بازیگران مخرب دادههای حساس را هنگام انتقال بین کلاینت و سرور رهگیری یا تغییر میدهند. مهم است که از آخرین نسخههای HTTPS و TLS استفاده شود، زیرا نسخههای قدیمی میتوانند به خطر بیفتند. مدیریت مناسب گواهی، رمزگشاییهای قوی و مکانیسمهای اعمال مانند Strict Transport Security (HSTS) نیز کمک میکنند تا مطمئن شوید API در برابر استراق سمع یا مداخله ایمن است.
استفاده از دروازه API
دروازههای API جزء مهمی از ایمن کردن APIها در مقیاس هستند. دروازه API به عنوان یک پروکسی بین کلاینت و backend عمل میکند و آن را ایدهآل برای پیادهسازی احراز هویت، محدودیت نرخ، اعتبارسنجی ورودی، لاگگیری و نظارت میکند. ابزارهایی مانند Kong، Apigee، AWS API Gateway و Tyk کنترل دسترسی دقیق را امکانپذیر میکنند در حالی که ویژگیهای نظارت و هشدار قدرتمندی ارائه میدهند. قرار دادن یک دروازه API در ابتدای معماری API شما، دید و کنترل بر هر درخواست و پاسخ را به شما میدهد و اجازه میدهد فعالیتهای مشکوک قبل از رسیدن به لایه برنامه شناسایی شوند.
استفاده از توکنهای محدود
افزودن scope به توکنهای دسترسی به جلوگیری از بسیاری از ریسکهای کاربران که دسترسی غیرمجاز به دست میآورند، کمک میکند، حتی اگر اعتبار داشته باشند. به جای ارائه کلیدهای پادشاهی، توکنهای دسترسی محدود به دادهها یا منابع خاص دسترسی میدهند. این با اصل کمترین امتیاز سازگار است، که به معنای اعطای حداقل دسترسی ممکن به کاربران است. یک توکن دسترسی ممکن است مشخص کند که یک کاربر میتواند دادههای کاربر را بازیابی کند اما آن را تغییر ندهد. ارائه کمترین دسترسی لازم به کاهش ریسکهای دسترسی غیرمجاز به API کمک میکند و در صورت نقض داده، آسیب را به حداقل میرساند.
محدود کردن منابع بر اساس IP یا مکان
محدود کردن دسترسی به منابع بر اساس آدرس IP یا مکان راه عالی دیگری برای جلوگیری از دسترسی غیرمجاز به API است. حتی اگر پایگاه کاربری جهانی داشته باشید، همچنان گزینههایی برای محدود کردن دسترسی به شما میدهد. برای مثال، ممکن است یک allowlist از آدرسهای IP پذیرفتهشده برای یک منبع خاص ارائه دهید. همچنین ممکن است دسترسی از مناطق جغرافیایی خاص را محدود کنید. تصور کنید API شما با افزایش حملات سایبری از ترکیه مواجه شده است. برای مثال، ممکن است اقدامات احتیاطی بیشتری در نظر بگیرید وقتی فراخوانیهای API از ترکیه میآیند، مانند الزام MFA در آن مورد، که همچنان API شما را برای کاربران مجاز ترکیهای مفید و قابل استفاده نگه میدارد.
استفاده از فایروال برنامه وب (WAF)
فایروالهای برنامه وب (WAFها) ممکن است به طور سنتی برای حفاظت از برنامههای وب استفاده شوند، اما میتوانند به حفاظت از API نیز سود برسانند. WAFها میتوانند حملات رایج مانند تزریق SQL، اسکریپتنویسی متقابل سایت (XSS) یا باتهای خودکار که سعی در پر کردن اعتبار دارند، را فیلتر کنند. حتی بهتر، WAFها میتوانند با قوانین سفارشی که به رفتار خاص API شما متناسب شدهاند، پیکربندی شوند به جای الگوهای عمومی، که آن را برای بازدارندگی دسترسی غیرمجاز به API مفید میکند حتی اگر کاربر توکن دسترسی داشته باشد.
مراقب توکنهای سوءاستفادهشده باشید
راههای متعددی وجود دارد که میتوانید از دسترسی کاربران غیرمجاز یا مخرب به منابع API جلوگیری کنید حتی اگر توکن دسترسی داشته باشند. اعمال انقضای توکن و چرخش آن روش رایجی است که به نگه داشتن آسیب به حداقل کمک میکند حتی اگر دسترسی غیرمجاز رخ دهد. حتی بهتر، توکنهای تازهسازی میتوانند برای کاربران مجاز صادر شوند و API شما را بدون ایجاد ناراحتی بیش از حد برای کاربران، امن نگه دارند. توکنهای دسترسی همچنین میتوانند به شناسههای خاص متصل شوند، مانند آدرس IP، اثر انگشت دستگاه یا ID کلاینت. به این ترتیب، اگر توکنهای یک کاربر خاص به طور مشکوک در سراسر جهان ظاهر شوند، میتوانید اقدامات حفاظتی اضافی قرار دهید در حالی که همچنان API شما را مفید نگه میدارید. در نهایت، میتوانید مدلهای رفتاری از کاربران فردی ایجاد کنید که به توکنهای دسترسی متصل شوند. این اجازه میدهد سیستم شما رفتار غیرعادی کاربر را حتی اگر توکن دسترسی مجاز داشته باشد، شناسایی کند.
نتیجهگیری نهایی در مورد جلوگیری از دسترسی غیرمجاز به API
یک API فقط به اندازه امنیتی که دارد مفید است. همانطور که دیدیم، حتی قرار دادن مجوزدهی و احراز هویت کافی نیست تا امنیت API را تضمین کند. بدون حفاظتهای اضافی، اکوسیستمهای API همچنان در برابر حملات رایج مانند اسکریپتنویسی متقابل سایت (XSS) یا اشتراکگذاری منابع cross-origin (CORS) آسیبپذیر هستند. احراز هویت توانایی مهمی برای نظارت و لاگگیری رفتار کاربر اضافه میکند و گزینههایی برای حفاظت از API شما حتی اگر کسی اعتبار داشته باشد، به شما میدهد. محدودیت نرخ، کنترل ترافیک و توکنهای محدود و منقضیشده همه به کاهش ریسکهای بالقوه در صورت نقض داده کمک میکنند. اعتبارسنجی ورودی تضمین میکند که هیچ کد مخربی به لایه برنامه API نرسد. دروازههای API دید و کنترل بر هر جنبه از API را امکانپذیر میکنند. رمزنگاری TLS از رهگیری دادههای حساس توسط بازیگران مخرب جلوگیری میکند. WAFها از حملات رایج مانند تزریق SQL یا XSS جلوگیری میکنند. با هم، آنها میتوانند یک سیستم امنیت API قوی ایجاد کنند حتی اگر کاربر احراز هویت شده باشد. برای نمونهای از دسترسی API درست انجامشده، میتوانید REST API GitHub را بررسی کنید. این یک مثال خوب از توکنهای دسترسی محدود و احراز هویت قوی است، زیرا احراز هویت را برای هر نقطه پایانی یا منبع الزامی میکند. همچنین میتوانید مثالهایی از محدودیت نرخ، اعتبارسنجی ورودی و رمزنگاری ببینید. دیدن این بهترین شیوهها در عمل، ایده بهتری درباره نحوه پیادهسازی این توصیهها در APIهای خود به شما میدهد.
