CORS چیست؟

CORS یا Cross-Origin Resource Sharing مکانیزمی است که اجازه می دهد یک صفحه وب منابع محدودی را از دامنه دیگری در خارج از دامنه ای که مبدا اصلی آن است، درخواست کند. با این مکانیزم یک صفحه وب می تواند آزادانه تصاویر یا منابع مختلف را در اختیار وب سرور های دیگر قرار بدهد.

مکانیزم CORS با اضافه کردن یک هدر جدید HTTP  به وب سرور اجازه می دهد  تا با یکسری دامنه موجود در لیست سفید و دارای مجوز اتصال برقرار کند.

به دلایل امنیتی، مرورگرها درخواست های HTTP با مبدا های متفاوت از مبدا اصلی را محدود می کنند. این بدان معنی است که یک صفحه وب فقط می تواند از همان مبدا صفحه ای که فایل از آن بارگیری شده است درخواست منابع کند، مگر اینکه پاسخ دریافتی از مبدا های دیگر شامل هدرهای CORS مناسب باشد.

مکانیزم CORS با استفاده از XMLHttpRequest L2 API به مرورگر وب اجازه ارسال درخواست های cross-domain را می دهد

 

 

هدر های CORS

در مکانیزم CORS  هدر های مختلفی وجود دارد. این هدر ها شامل هدر های درخواست و هدرهای پاسخ می باشند: 

  • Access-Control-Allow-Origin این هدر یک هدر پاسخ می باشد. به طور مثال سایتی با مبدا X قصد دریافت محتوای خاصی را از سایت مبدا Y دارد, پس از دریافت درخواست، سایت Y می تواند این هدر را به عنوان پاسخ ارسال کرده و به مرورگر بگوید که فایل ها و محتویات این صفحه برای مبدا X  قابل دسترسی می باشد.
  • Access-Control-Allow-Credentials : این هدر یک هدر پاسخ می باشد که دسترسی برای ارسال کوکی‌ها و هدرهای اعتبارسنجی را تعیین می کند.
  • Access-Control-Expose-Headers : این هدر یک هدر پاسخ می باشد که دسترسی برای تغییر هدر ها را تعیین می دهد. 
  • Access-Control-Allow-Methods : این هدر هم یک هدر پاسخ است، سرور با این هدر به مرورگر می گوید که متدهای (HTTP put, post, delete, get) مجاز را شناسایی کند. در صورتیکه سرور تنها اجازه یک نوع متد را داده باشد و درخواست نوع دیگری ارسال شود, درخواست ارسال شده توسط مرورگر حذف می شود.
  • Access-Control-Allow-Headers : تعیین هدرهای قابل تغییر توسط درخواست دهنده
  • هدر Origin : این هدر یک هدر درخواست است که به سرور می گوید از کدام دامین مبدا درخواست فرستاده شده است. 

خطاهای متداول CORS

در صورتی که مکانیزم CORS به درستی اجرا نشود، می تواند برای امنیت و محرمانگی اطلاعات سایت یا برنامه مورد نظر ریسک ها و خطرات زیادی داشته باشد، به این صورت که به شخص ثالث اجازه ارسال هرگونه درخواست داده می شود و به راحتی موفق به دریافت اطلاعات شما می شود. 

تنظیمات اشتباه در مکانیزم CORS

مکانیزم CORS دارای دو جزء اصلی می باشد که دو عدد از هدر های ذکر شده در بالا هستند، در صورت بروز اشتباه در تنظیمات این دو بخش، ممکن است خطرات قابل توجهی را باعث شود. این دوبخش مهم و اصلی عبارت اند از:  

  • Access-Control-Allow-Origin  که امکان تعامل دو طرفه برای وب سایت های شخص ثالث را فراهم می کند. این مسئله می تواند  درمورد درخواست هایی که اطلاعات حساس را اصلاح یا در کل دچار تغییر می کنند، برای وب سایت یا برنامه وب مشکل ایجاد کند.
  • Access-Control-Allow-Credentials که به وسیله آن اشخاص ثالث میتوانند اقدامات خاصی را انجام دهند. در این صورت این تغییرات ایجاد شده را می توان یک حمله دانست، زیرا این تغییرات را فقط صاحب سایت یا برنامه و اشخاص دارای مجوزباید بتوانند انجام دهند.

در ادامه، متداول ترین تنظیمات مکانیزم CORS و نتایج و خطرات ناشی از آن در تنظیمات CORS را برای شما بیان کرده ایم:

  1. اجازه ورود به تمام مبدا ها: این اشتباه بدترین نوع اشتباهاتی است که ممکن است انجام شود.با این کار سیاست Same-Origin را کاملا غیر فعال می کنید. در صورتی که این مورد را محدود کنید، سرور به مبدا های غیر مجاز پاسخ نخواهد داد، درنتیجه آن ها اطلاعاتی دریافت نمی کنند. 
  2. اجازه ورود با subdomain سایت شما به صورت.your-website.com* : با اینکه این مورد بهتر از مورد قبلی است، اما همچنان در صورتی که subdomain های شما در مقابل حمله های Xss و CSRF آسیب پذیر باشد، همچنان شخص ثالث می تواند به امنیت سایت شما آسیب وارد کند. Xss  حمله ای است که در این حمله کد جاوا اسکریپتی مخفیانه روی کامپیوتر شما اجرا میشود که می‌تواند اطلاعات اساسی ای را از سیستم شما برداشت کند، و حمله CSRF حمله ای است که با جعل درخواست از سایت هایی که قبلا مجوز ورود به سایت شما را داشته اند، قصد ایجاد تغییر در سایت شما را دارد. در صورتی که این مورد را محدود کنید، حتی در صورتی که subdomain های شما در مقابل آن حملات آسیب پذیر باشد، باز هم شخص ثالث نمی تواند اطلاعاتی از سایت شما برداشت کند.
  3. اجازه ورود با پیش دامنه یا پس دامنه: مثل your-website.com.evil.com یا notyour-website.com که این مورد ریسک بالایی دارد، زیرا فرد غیر مجاز می تواند با شبیه سازی یک دامنه مانند دامنه های شما، وارد سایت شود و دسترسی هایی که به آن دامنه ها داده اید را دریافت کند.

حمله در مکانیزم CORS 

حمله در مکانیزم CORS

در صورت اجازه دادن به هر مبدا دلخواه با قابلیت درخواست اعتبارنامه مثل هدرها و کوکی های HTTP درخواست احراز هویت،  به طور موثری سیاست Same-Origin را غیر فعال می کنید و به هر وب سایتی اجازه می دهد درخواست های تأیید شده را برای برنامه وب شما صادر کند. یک مهاجم می تواند یک سایت تقلبی مثل (www.malicious-site.com) را بسازد وبه صورت غیر مجاز برای هدایت کاربران شما به آن استفاده کند.

اگر یک کاربر در سایت شما احراز هویت شده باشد ، www.malicious-site.com می تواند به عنوان آن کاربر تأیید شده یک API call ایجاد کند به این معنی که URL را بنویسد و درخواست را به سرورارسال کند. در این مرحله اطلاعات مهم و حساس در معرض خطر حمله قرار می گیرند.

 

سناریوی انجام حمله توسط مهاجم با یک وب سایت دیگر:

  1. قربانی در حالی که در وب سایت شما مورد تأیید اعتبار است، از وب سایت دیگری بازدید می کند.
  2. ان وب سایت دیگر اسکریپت مخربی را در اختیار قربانی قرار می دهد که با وب سایت شما تعامل خواهد کرد.
  3. قربانی آن اسکریپت مخرب را اجرا می کند و از طریق آن درخواستی را برای وب سایت شما صادر می کند. مهاجم می تواند از این درخواست  برای تکمیل یک کار مهم مانند تغییر تنظیمات کاربر سوء استفاده کند.
  4. وب سایت شما با اطلاعات درخواست شده و هدر CORS به مرورگر قربانی پاسخ می دهد.
  5. در این مرحله هدر CORS بررسی می شود تا مشخص شود آیا داده ها می توانند به آن وب سایت دیگر ارسال شوند یا خیر. در این سناریوی حمله، دسترسی به صورت access-control-allow-credentials: true است.
  6. اطلاعات از مرورگر قربانی به آن وب سایت دیگرارسال می شود.

برای جلوگیری از این مشکل بهتر است شما یک لیست سفید داشته باشید که در آن لیست، دامنه های مجاز و تایید شده قرار داشته باشد. با ایجاد لیست سفید برای دسترسی Access-Control-Allow-Origin، کاربران دارای دسترسی فقط به دامنه هایی محدود می شود که مستقیماً با سایت اصلی یا API شما سروکار دارند.

بنر سیستم عامل روشی است که صاحب سایت ها و سرورهای مجازی از آن استفاده می کنند تا صفحه خود را در اینترنت نشان دهند. افراد مخرب می توانند از طریق این بنر ها با بدست آوردن اطلاعات سایت شما سوء استفاده کنند.

شما می توانید با استفاده از مکانیزم CORS اطلاعات قابل به اشتراک گذاری توسط این بنر را کاهش دهید. به عنوان مثال در صورتی که اطلاعاتی مانند سیستم عامل ، نسخه Apache HTTP و OpenSSL قابل مشاهده باشد مهاجمان می توانند به اطلاعات داخلی سرور مجازی شما دسترسی پیدا کنند و آسیب پذیری های آن را پیدا کنند و از آن ها برای حملات خود سوء استفاده کنند. برای آشنایی بیشتر با سرور مجازی به صفحه سرور مجازی چیست و کاربرد های آن مراجعه کنید.

سوالات متداول CORS

 

CORS یا Cross-Origin Resource Sharing مکانیزمی است که اجازه می دهد یک صفحه وب منابع محدودی را از دامنه دیگری در خارج از دامنه ای که مبدا اصلی آن است، درخواست کند.
هدر Access Control Allow Origin
هدر Access Control Allow Methods
هدر Access Control Allow Credentials
هدر Access Control Expose Headers
هدر Access Control Allow Headers
در صورتی که مکانیزم CORS به درستی اجرا نشود، می تواند برای امنیت و محرمانگی اطلاعات سایت یا برنامه مورد نظر ریسک ها و خطرات زیادی داشته باشد، به این صورت که به شخص ثالث اجازه ارسال هرگونه درخواست داده می شود و به راحتی موفق به دریافت اطلاعات شما می شود. 
 
?What is CORS