این روزها اقتصاد API بیشتر از هر زمانی در حال رشد و صعود است و الان در نقطهای هستیم که APIها نقش اساسی در موفقیت کسبوکارها دارند. با این حال، این توسعه چالشهای جدیدی را برای کسبوکارها ایجاد میکند. در سال ۲۰۱۷ گارتنر پیشبینی کرد که تا سال ۲۰۲۲، سو استفاده از APIها یکی از شایعترین موارد ضدامنیتی خواهد بود که منجر به نقض دادهها برای برنامههای تحت وب بزرگمقیاس میشود. ۲۰۲۰ سالی است که علیرغم همهگیری کرونا، رشد دنیای APIها بیشتر از هر زمان دیگری بود. بنابراین الان زمانی است که باید به موضوع امنیت API توجه بیشتری شود.
در این یادداشت چکلیستی به شما معرفی خواهیم کرد که میتوانید به کمک آن مقوله امنیت APIها را به کمکش رصد کنید و ریسک حملات سایبری را برای کسبوکار خود کاهش دهید.
همیشه از درگاههای API استفاده کنید
درگاههای API ویژگیهای ترافیکی را متمرکز میکنند و آنها را برای هر درخواستی که به API شما برخورد میکند، آماده میکند و از آنها محافظت میکند. ویژگیهای اصلی درگاههای API مانند محدود کردن نرخ، مسدود کردن کلاینتهای مخرب و ثبت نام مناسب، به امنیت مرتبط است. این ویژگیها میتواند کاربردیتر و مرتبط با کسبوکارها هم باشند، مانند بازنویسی مسیر و صفحهها و جمعآوری معیارهای تجاری. عدم کنترل این درخواستها میتواند به راحتی منجر به یک تهدید امنیتی شدید شود.
علاوهبراین، بدون درگاه ارائهدهندگان API باید هر نقطه پایانی را با این ویژگیها یک به یک تقویت کنند. یک دروازه API روند افزودن یا رفع این ویژگیها را آسان میکند.
در نهایت، تعداد زیادی از محصولات درگاه API در بازار موجود است و میتوان از آنها برای امنیت بیشتر استفاده کرد.
پیشنهاد میکنیم یادداشت «درگاه API چیست؟» را هم بخوانید.
از سرور OAuth مرکزی برای صدور توکنها استفاده کنید
نشانههای دسترسی یا بهروزرسانی باید از سمت سرور باشد و نه از سمت درگاههای API یا خود APIها. پیچیدگی فرایندهای دخیل باعث میشود اهمیت انتخاب یک سرور OAuth مرکزی به عنوان روش انحصاری صدور توکنها را مشخص میکند. این روش مستلزم احراز هویت کلاینت و کاربر، مجوز دادن به کلاینت، امضای توکنها و سایر عملیات است. همه این توابع نیاز به دسترسی به دادههای مختلف، مانند اطلاعات مشتری، یا مکانیسم احراز هویت ترجیحی دارند. علاوهبراین، اگر بسیاری از نهادها توکنها را صادر و امضا کنند، مدیریت تمام اعتبارنامههای مورد استفاده برای امضای کلیدهای صادر شده به طور فزایندهای چالشبرانگیز میشود. بنابراین، تنها یک نهاد وجود دارد که میتواند با خیال راحت اینها را مدیریت کند و آن سرور OAuth است.
توکنهای تحت وب JSON را برای استفادههای داخلی به کار برید.
هنگامی که APIها متصل میشوند، استفاده از توکنهای تحت وب JSON به عنوان توکنهای دسترسی و بهروزرسانی کار خوبی است. خدماتی که این توکنها را دریافت میکنند، میتوانند از اطلاعات ادعایی آن برای اتخاذ تصمیمات تجاری آگاهانه استفاده کنند. به عنوان مثال، ممکن است برای تعیین اینکه آیا کسی که API را فراخوانی میکند، به یک منبع خاص دسترسی داشته باشد یا نه، استفاده شود.
با این حال، هنگامی که توکنها در خارج از زیرساخت شما در اختیار مشتری شخص ثالث قرار میگیرد، باید به جای توکن JSON از توکنهای غیرشفاف استفاده شود. دلیل این امر این است که اطلاعات در یک توکن JSON به راحتی در دسترس است و به راحتی رمزگشایی میشود. این میتواند مشکلات و چالشهایی را برای حفظ حریم شخصی ایجاد کند و باید با این راه اطمینان حاصل کرد که هیچ دادهی حساسی در اختیار توکنهای JSON قرار نمیگیرد.
علاوهبراین، اشتراکگذاری توکنهای JSON با مشتریان شخص ثالث در ابتدای کار، احتمال وابستگی آنها به دادههای JSON افزایش میدهد. در نتیجه، هر گونه تغییر در آینده، باعث میشود نیاز به تغییرات زیادتر و بنیادیتر افزایش پیدا کند.
اگر همچنان میخواهید از توکنهای غیرشفاف برای ارتباطهای خارجی و از توکنهای JSON برای ارتباطات داخلی استفاده کنید، این دو روش ممکن است به شما کمک کند: توکن فانتوم و توکن تقسیم. هر دو روش شامل یک درگاه API هستند که یک توکن غیرشفاف را به JSON ترجمه میکند. علاوهبراین باید در زمینه شیوههای بهبود امنیت JSON Web Tokens مطالب بیشتری بخوانید.
برای دسترسیهای درشتدانه محدوده تعیین کنید
توکنهایی با قابلیت محدود شما را ایمنتر میکنند. اگر اعتبار مشتری به سرقت رفته دامنهی محدودی داشته باشد، مهاجم قدرت بسیار کمتری خواهد داشت. بنابراین همیشه باید توکنهایی با قابلیت محدود صادر کنید. برای انجام این کار، باید دامنههای OAuth را پیادهسازی کنید. تایید دامنههای توکن را میتوان به کمک درگاه API انجام داد تا ترافیک مخربی را که به API شما میرسد، محدود کنیم. همچنین از Scopes برای اجرای کنترل دسترسی درشتدانه میتوان استفاده کرد. این کنترل باعث میشود مشخص شود که یک نشانه دسترسی معین میتواند یک منبع مشخص را پرسوجو کند یا تایید اینکه مشتری میتواند از یک نوع محتوا استفاده کند، یا خیر.
کنترل دسترسی دقیق را مطالبه کنید
براساس OWASP نقض کنترل دسترسی یکی از ۱۰ مورد اول در زمینه آسیبپذیری امنیت APIهاست. بنابراین لازم به ذکر است که میتوان با کنترل دسترسی دقیق در سطح API از آن جلوگیری کرد. API باید مشخص کند که درخواست به مرحله نهایی ارسال شده است یا نه. همچنین باید بررسی کند که آیا کسی که API را فراخوانی کرده حق دسترسی به دادهها را دارد یا نه و اینکه چه اطلاعاتی میتواند بر اساس هویت آن فرد، به او نمایش داده شود.
این عمل باعث میشود امنیت بیشتری در زمان تهاجم تجربه شود. اگر یک درخواست مخرب از طریق درگاه عبور کند، در صورت طراحی فرایند کنترل دسترسی دقیق، API این درخواست را رد میکند.
به هیچ عنوان اعتماد نکنید
همیشه سعی کنید مطمئن شوید که API شما تا حد امکان به ترافیک ورودی اعتماد نمیکند و آن را محدود میکند. اولین قدم برای این کار، استفاده از HTTPS برای تمام ترافیک API است. در صورت امکان، از HTTPS داخلی استفاده کنید تا ترافیک بین سرویسها قابل شناسایی نباشد.
دوم، سرویسهای شما باید همیشه توکنهای تحت وب JSON ورودی را تایید کنند، حتی اگر توسط درگاه به یک توکن شفاف تبدیل شده باشند. این کار کمک میکند که در موقعیتهایی که در آن یک درخواست موفق به دور زدن درگاه میشود، تشخیص داده شود و از تهاجم آن به زیرساختهای شما جلوگیری شود.
از کتابخانههایی با قابلیت اعتبارسنجی توکنهای تحت وب JSON استفاده کنید
اعتبارسنجی مناسب برای توکنهای تحت وب JSON به امنیت APIهای شما کمک میکند. اگر هر تیم راهحل اعتبارسنجی خودش را برای توکنهای تحت وب JSON پیادهسازی کند، خطر آسیبپذیری کل سیستم را افزایش میدهد. این اشتباهی رایج است که رفع آن کار دشواری است. در عوض، لازم است یک راه حل در سطح کل سیستم و شرکت برای اعتبارسنجی استفاده شود، بهتر است. بهتر است این راهحل بر اساس کتابخانههای موجود در بازار و متناسب با نیازهای API شما انجام شود.
استاندارد کردن فرایند اعتبارسنجی در سطح شرکت به تضمین سطح یکسان امنیت در تمام نقاط پایانی شما کمک میکند. در صورت بروز مشکل، تیمها میتوانند آنها را سریعتر حل کنند. برای کارهای حساسی مانند اعتبارسنجی توکنهای تحت وب JSON حل سریع تهدید بسیار مهم است.
از مجموعه کلیدهای وب JSON برای توزیع کلید استفاده کنید
برای محافظت از یکپارچگی JWT، یک API باید به یک کلید عمومی دسترسی داشته باشد. شما میتوانید این کار را به چند روش انجام دهید:
میتوانید ارزش کلید را کدگذاری کنید.
میتوانید در هنگام راهاندازی سرویستان از نقطه پایانی پرسوجو کنید و نتیجه را در حافظه کش ذخیره کنید.
روش پیشنهادی دریافت کلید از نقطه پایانی JWKS است که توسط سرور OAuth در معرض دید قرار گرفته است. API باید کلید دانلود شده را کش مند تا ترافیک غیر ضروری محدود شود و هر زمان کلید امضا شده پیدا شود، نقطه پایانی JWKS را دوباره جستجو کند.
این کار امکان یک چرخش کلید ساده را فراهم میکند که سرور OAuth بتواند بدون ایجاد اختلال در سرویسهای API آن را بر حسب تقاضا انجام دهد. استفاده از مجموعه کلیدها به جای کلیدها، امکان چرخش یکپارچه کلید را برای مشتریان فراهم میکند. سرور OAuth میتواند شروع به صدور توکنهای جدید امضا شده با یک کلید جدید کند و تا زمانی که کلید عمومی قدیمی بخشی از مجموعه کلیدها باشد، توکنهای موجود را تایید میکند.
به کمک کنترل جریان اطلاعات بین APIها، مطالبات را به صورت مرکزی مدیریت کنید
همانطور که توسط مشخصات توکنهای تحت وب JSON تعریف شده است، یک مطالبه بخشی از اطلاعات است که در مورد یک موضوع بیان میشود. بررسی این درخواستها به کمک یک سرور OAuth کار بسیار درستی است و کنترل درخواستها توسط توکنها را آسانتر میکند. این موضوع به دلایل حفظ حریم خصوصی و امنیتی مهم است.
چه در حال فراخوانی سرویسهای داخلی باشید و چه سرویسهای خارجی، همه APIها باید از روشهایی که سرور مرکزی تعیین کرده، پیروی کنند. علاوهبراین نیابد اطلاعات غیرضرپری اضافه کند و یا توکن صادر کند.
مدیریت درخواستها به صورت متمرکز به شما امکان میدهد تا جریان اطلاعات API ها را کنترل کنید تا اطمینان حاصل کنید که دادههای اضافی وارد سیستم شما نمیشود و یا از آن خارج نمیشود.
از روشهای مختلف احراز هویت استفاده کنید
سعی کنید روشهای مختلف احراز هویت را برای سطوح مختلف امنیتی به صورت ترکیبی استفاده نکنید. اگر منبعی دارید که با روش احراز هویت سختگیرانهتری به طور معمول در دسترس یک سطح به خصوص قرار میگیرد، ولی شما با روش احراز هویت سادهتری در دسترس قرار میدهید، امکان سو استفاده از API را افزایش خواهید داد. در برخی از موارد ممکن است یک خطر امنیتی جدی کل سیستم شما را تهدید کند.
سعی کنید APIهای خودتان را بدون محافظت رها نکنید
APIهای داخلی خودتان را فراموش نکنید. آنها علاوهبراین که باید از امنیت کافی برخوردار باشند، باید حفاظتهایی را اجرا کنند تا سیستم مطمئن شود از هر گونه تهدیدی از داخل سیستم در امان است. غیرمعمول نیست که APIها فقط برای استفاده داخلی توسعه پیدا کنند و بعدها در صورت نیاز به بیرون از سازمان عرضه شود. در چنین سناریوهایی ممکن است مقوله امنیت API نادیده گرفته شود. هنگامی که API در خارج از سازمان عرضه میشود، در برابر حملات آسیبپذیرتر میشود.
همچنین، امنیت از طریق ابهام و گمنامی هم توصیه نمیشود. فقط به این دلیل که شما یک نام پیچیده برای نقطه پایانی خودتان گذاشتهاید به این معنی نیست که API شما در امان خواهد بود. فقط باعث شدهاید دسترسی به نقطه پایانی دیرتر اتفاق بیفتد، اما از حمله گریزی نیست.
همیشه پایش و ارزیابی کنید
مطمئن شوید که همواره چشمهای بیشتری APIهای سازمان شما را رصد میکنند. حفظ استانداردهای بالا برای APIها، چه از نظر امنیتی و چه از نظر طراحی کار مهم و حساسی است. بنابراین، تقسیم مسئولیت بین گروههای مختلف افراد را در نظر بگیرید و از تیمهای دیگر بخواهید که APIهای تیم شما را بررسی کنند. رویکردهای مختلفی برای تنظیم حاکمیت بر API شما وجود دارد. میتوانید یک تیم اختصاصی از کارشناسان API داشته باشید که جنبههای طراحی و امنیت را بررسی کند یا گروهی از کارشناسان API ایجاد کنید که از گروههای مختلف انتخاب شدهاند تا راهنمایی ارائه کنند.
بررسی مداوم برای سو استفاده احتمالی انجام دهید
فقط به این دلیل که امنیت API شما تا به حال خدشه دار نشده، معنی آن این نیست که همه چیز خوب است. شما باید معیارهای مختلف را جمعآوری کنید و میزان استفاده از API خود را هم ثبت کنید تا هرگونه رفتار ناخواسته را مشاهده کنید. باید مراقب درخواستهایی که روی شناسههای شما تکرار میشوند، درخواستهایی که با هدرها و دادههای غیر منتظره انجام میشوند، مشتریانی که کلاینتهای زیادی برای دور زدن محدودیتها ایجاد میکنند و دیگر نشانههای مشکوک باشید. از دست داده دادهها به دلیل سو استفاده از API میتواند به همان اندازه برای کسبوکار شما مضر باشد که هکرها از امنیت عبور میکنند.
حفظ امنیت API یک وظیفه مهم است!
همانطور که در این یادداشت مطالعه کردید، استراتژیهای فنی زیادی وجود دارد که باید هنگام طراحی فرایندهای مجوز داده و احراز هویت در نظر گرفت، که اگر تضعیف شوند، میتوانند مستقیما بر امنیت API تاثیر بگذارند. با پیروی از این بهترین اقدامات، میتوانید از APIهای خود محافظت کنید و رفتارهای ناخواسته را خنثی کنید.