بررسی‌کننده CORS

پیکربندی اشتراک‌گذاری منابع مبدأ متقاطع (CORS) را برای هر URL بررسی کنید. هدرهای پاسخ Access-Control-* را بازرسی کنید، یک درخواست پیش‌پرواز اختیاری (OPTIONS) با مبدأ/روش/هدرهای سفارشی اجرا کنید و پیکربندی‌های اشتباه رایج مانند کاراکتر عمومی + اعتبارنامه‌ها، فقدان Vary: Origin یا allow-headers بیش از حد گسترده را شناسایی کنید.

Loading…

درباره بررسی‌کننده CORS

URL یک API یا صفحه را جایگذاری کنید و تأیید کنید که آیا مرورگرها درخواست‌های مبدأ متقاطع را مجاز می‌دانند یا خیر. این ابزار هدرهای پاسخ CORS را تحلیل می‌کند، می‌تواند یک بررسی واقعی پیش‌پرواز (OPTIONS) را اجرا کند و پیکربندی‌های پرخطر یا خراب (مانند "*" با اعتبارنامه‌ها، فقدان Vary: Origin یا allow-methods/allow-headers ضعیف) را برجسته می‌کند.

ویژگی‌ها

  • بازرسی هدر CORS برای هر URL عمومی (هدرهای Access-Control-* و مرتبط).
  • شبیه‌سازی اختیاری پیش‌پرواز (OPTIONS) با مبدأ، روش درخواست و هدرهای درخواست سفارشی.
  • دنبال کردن تغییر مسیرها (تا ۱۰ مورد) تا نقطه پایانی نهایی که مرورگرها در واقع به آن می‌رسند را تأیید کنید.
  • نمای هدرهای خام برای شفافیت و اشکال‌زدایی کامل.
  • یافته‌ها + کارت امتیاز با فیلتر "فقط مشکلات" برای تریاژ سریع.
  • تحلیل Vary برای شناسایی فقدان Vary: Origin و سایر مشکلات CORS مرتبط با حافظه نهان.
  • خروجی گرفتن نتایج به صورت گزارش‌های JSON و PDF برای حسابرسی‌ها، تیکت‌ها و مستندات.
  • توصیه‌های داخلی برای مشکلات رایج: کاراکتر عمومی+اعتبارنامه‌ها، بازتاب Origin، Origin تهی، فقدان allow-methods/allow-headers، فقدان max-age و allow-headers بیش از حد گسترده.

🧭 نحوه استفاده for cors-checker

1

وارد کردن URL هدف

نقطه پایانی که می‌خواهید آزمایش کنید را جایگذاری کنید (مثلاً https://api.example.com/resource).

2

تنظیم مبدأیی که از آن آزمایش می‌کنید

مبدأ برنامه فرانت‌اند خود را وارد کنید (طرح + میزبان)، مثلاً https://app.example.com. این مقداری است که مرورگرها در هدر Origin ارسال می‌کنند.

3

انتخاب حالت بررسی

از حالت خودکار (توصیه شده) برای تحلیل هم هدرهای پاسخ و هم رفتار پیش‌پرواز استفاده کنید. از درخواست ساده اگر به طور خاص یک سناریوی غیر پیش‌پرواز می‌خواهید، یا فقط پیش‌پرواز برای اجرای بررسی‌های OPTIONS استفاده کنید.

4

پیکربندی جزئیات پیش‌پرواز (در صورت لزوم)

«اجرای پیش‌پرواز (OPTIONS)» را فعال کنید و روش درخواست به علاوه هدرهای درخواست (جدا شده با کاما) را برای شبیه‌سازی رفتار واقعی پیش‌پرواز مرورگر تنظیم کنید (مثلاً مجوز، نوع محتوا). اگر مورد استفاده شما شامل کوکی‌ها یا هدرهای احراز هویت است، «در نظر گرفتن اعتبارنامه‌ها» را تغییر دهید.

5

مرور یافته‌ها و خروجی گرفتن

یافته‌ها/کارت امتیاز و جزئیات تحلیل CORS را بررسی کنید. هنگام اشکال‌زدایی «نمایش هدرهای خام» را روشن کنید. برای اشتراک‌گذاری یا ذخیره در حسابرسی‌ها، JSON/PDF را خروجی بگیرید.

مشخصات فنی

مدل درخواست

این ابزار هدرهای CORS را برای یک URL هدف بازرسی می‌کند و می‌تواند به طور اختیاری یک درخواست پیش‌پرواز (OPTIONS) با استفاده از مبدأ، روش و هدرهای درخواستی ارائه شده انجام دهد. دنبال کردن تغییر مسیر پشتیبانی می‌شود.

تنظیمرفتارپیش‌فرض
حالت بررسیخودکار، درخواست ساده، یا فقط پیش‌پروازخودکار
اجرای پیش‌پرواز (OPTIONS)در صورت فعال بودن، شبیه‌سازی پیش‌پرواز OPTIONS را انجام می‌دهدفعال
مبدأمقدار هدر Origin مورد استفاده برای تحلیل/پیش‌پروازhttps://example.com
روش درخواستمقدار Access-Control-Request-Method برای پیش‌پروازGET
هدرهای درخواستAccess-Control-Request-Headers (جدا شده با ویرگول) برای پیش‌پروازخالی
دنبال کردن تغییر مسیرهازنجیره تغییر مسیر را تا آدرس نهایی دنبال می‌کندفعال
حداکثر تغییر مسیرهاسقف تغییر مسیر برای جلوگیری از حلقه‌ها10 (محدوده ۰–۲۰)
مهلت زمانیمحدودیت مهلت زمانی درخواست۱۵۰۰۰ میلی‌ثانیه
کاربر-عاملکاربر-عامل درخواست را شناسایی می‌کندEncode64Bot/1.0 (+https://encode64.com)
شبکه‌های خصوصیبرای ایمنی، دسترسی به محدوده‌های شبکه خصوصی را مسدود می‌کندغیرفعال (شبکه‌های خصوصی مجاز نیستند)

هدرهای تحلیل شده (مجموعه اصلی CORS)

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

هدرهدف
Access-Control-Allow-Originکدام مبدأ(ها) مجاز هستند
Access-Control-Allow-Credentialsآیا کوکی‌ها/اعتبارنامه‌ها مجاز هستند (نیازمند مبدأ غیر-ستاره‌ای است)
Access-Control-Allow-Methodsمتدهای مجاز برای درخواست‌های کراس-اوریجین (مهم برای پیش‌پرواز)
Access-Control-Allow-Headersهدرهای مجاز (مهم برای Authorization و هدرهای سفارشی)
Access-Control-Expose-Headersکدام هدرها توسط جاوااسکریپت مرورگر قابل خواندن هستند
Access-Control-Max-Ageمدت زمان ذخیره‌سازی پیش‌پرواز در کش مرورگر
Varyتنوع کلید کش (مثلاً Vary: Origin) برای جلوگیری از مسمومیت/اختلاط کش
Origin / Access-Control-Request-*برای شبیه‌سازی رفتار پیش‌پرواز استفاده می‌شود

اکتشافات (مشکلات رایج CORS علامت‌گذاری شده)

یافته‌ها بر اساس بررسی‌های عملی و امنیتی برای تشخیص پیکربندی‌های شکسته یا پرریسک CORS است.

بررسیاهمیت
کاراکتر عمومی + اعتبارنامه‌هاAccess-Control-Allow-Origin: * را نمی‌توان با اعتبارنامه‌ها استفاده کرد؛ مرورگرها مسدود می‌کنند یا رفتار ناامن است
عدم وجود Vary: Originاگر پاسخ‌ها بر اساس Origin متفاوت باشند اما به درستی کش نشوند، کش‌های اشتراکی می‌توانند پاسخ‌های سایت‌های مختلف را مخلوط کنند
بازتاب Originبازتاب کورکورانه Origin می‌تواند به طور ناخواسته اوریجین‌های غیرقابل اعتماد را مجاز کند
هشدارهای Origin نالOrigin: null می‌تواند در iframeهای سندباکس یا زمینه‌های فایل ظاهر شود؛ مجاز کردن آن اغلب پرریسک است
عدم وجود Allow-Methods / Allow-Headersپیش‌پرواز ممکن است شکست بخورد اگر سرور به صراحت متد/هدرها را مجاز نکند
Allow-Headers بیش از حد گستردهمجاز کردن هدرهای زیاد می‌تواند سطح حمله را گسترش دهد
عدم وجود Max-Ageپیش‌پرواز ممکن است بیش از حد اجرا شود و تاخیر ایجاد کند
CORS یک مکانیزم اجرایی مرورگر است. سرورها همچنان می‌توانند از طریق کلاینت‌های غیرمرورگری در دسترس کراس-اوریجین باشند؛ CORS را به عنوان بخشی از یک وضعیت امنیتی گسترده‌تر در نظر بگیرید، نه تنها کنترل.

خط فرمان

از این دستورات برای بازتولید رفتار CORS و پیش‌پرواز از ترمینال خود استفاده کنید. برای اشکال‌زدایی و تأیید آنچه ابزار گزارش می‌دهد مفید هستند.

macOS / Linux

بررسی هدرهای CORS برای یک درخواست عادی (شبیه‌سازی Origin مرورگر)

curl -i -H "Origin: https://example.com" https://api.example.com/resource

به دنبال Access-Control-Allow-Origin، Access-Control-Allow-Credentials و Vary باشید.

اجرای یک درخواست پیش‌پرواز OPTIONS (متد + هدرها)

curl -i -X OPTIONS -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: authorization, content-type" https://api.example.com/private

پیش‌پرواز باید Access-Control-Allow-Methods و Access-Control-Allow-Headers صحیح را برای ادامه کار مرورگر بازگرداند.

دنبال کردن تغییر مسیرها در حین بررسی هدرها

curl -iL -H "Origin: https://example.com" https://api.example.com

زمانی مفید است که نقاط پایانی به یک میزبان متفاوت که قوانین CORS متفاوتی دارد، تغییر مسیر می‌دهند.

ویندوز (PowerShell)

بررسی هدرهای پاسخ با یک هدر Origin

$r = Invoke-WebRequest -Uri https://api.example.com/resource -Headers @{ Origin = "https://example.com" }; $r.Headers

هدرهای Access-Control-* را در صورت وجود نمایش می‌دهد.

اگر فرانت‌اند شما از کوکی‌ها یا احراز هویت استفاده می‌کند، از CORS سهل‌گیرانه پرهیز کنید. ترجیحاً یک لیست مجوز صریح از مبداهای مورد اعتماد داشته باشید و در زمانی که پاسخ‌ها بر اساس مبدا متفاوت هستند، Vary: Origin را لحاظ کنید.

موارد استفاده

اشکال‌زدایی خطای مرورگر "CORS مسدود شد"

وقتی fetch/XHR با خطای CORS شکست می‌خورد، بررسی کنید که آیا سرور هدرهای Access-Control-* مورد نیاز برای مبدا و نوع درخواست شما را برمی‌گرداند یا خیر.

  • تأیید کنید که Access-Control-Allow-Origin با مبدا برنامه شما مطابقت دارد
  • اگر از کوکی‌ها/احراز هویت استفاده می‌کنید، بررسی کنید که Access-Control-Allow-Credentials برابر true باشد (و مبدا، wildcard نباشد)
  • اطمینان حاصل کنید که وقتی چندین مبدا مجاز هستند، Vary: Origin وجود دارد

اعتبارسنجی درخواست پیش‌پرواز برای هدرهای Authorization / سفارشی

اکثر فراخوانی‌های API احراز هویت شده، به دلیل هدر Authorization یا انواع محتوای غیرساده، درخواست پیش‌پرواز را فعال می‌کنند. این ابزار کمک می‌کند تا اطمینان حاصل شود پاسخ‌های OPTIONS، متد و هدرهای مورد نیاز را مجاز می‌کنند.

  • تأیید کنید که Access-Control-Allow-Methods شامل POST/PUT/PATCH/DELETE در صورت نیاز باشد
  • تأیید کنید که Access-Control-Allow-Headers شامل authorization، content-type و هدرهای X-* مورد نیاز باشد
  • قبل از استقرار، عدم وجود allow-methods/allow-headers را شناسایی کنید

بازبینی امنیتی خط‌مشی CORS

پیکربندی‌های نادرست CORS می‌توانند به طور ناخواسته APIهای خصوصی را در معرض سایت‌های مخرب قرار دهند (به ویژه با احراز هویت). از یافته‌ها برای شناسایی الگوهای پرخطر استفاده کنید.

  • شناسایی مبدا wildcard همراه با احراز هویت
  • شناسایی الگوهای بازتاب مبدا که سایت‌های دلخواه را مجاز می‌کنند
  • علامت‌گذاری مجاز بودن Origin: null زمانی که مورد نظر نیست

بهبود عملکرد با کش کردن درخواست پیش‌پرواز

درخواست‌های پیش‌پرواز، رفت و برگشت و تأخیر شبکه را افزایش می‌دهند. تنظیم صحیح Max-Age می‌تواند بررسی‌های تکراری پیش‌پرواز برای APIهای پایدار را کاهش دهد.

  • تأیید کنید که Access-Control-Max-Age در صورت مناسب بودن وجود دارد
  • کاهش فراخوانی‌های تکراری OPTIONS برای ترافیک مکرر API

❓ Frequently Asked Questions

CORS به زبان ساده چیست؟

CORS (اشتراک‌گذاری منابع بین مبداها) یک مکانیزم امنیتی مرورگر است که کنترل می‌کند آیا یک صفحه وب از یک مبدا (طرح + میزبان + پورت) می‌تواند پاسخ‌های یک مبدا دیگر را بخواند یا خیر. این مکانیزم به هدرهای پاسخ خاص Access-Control-* متکی است.

مرورگر چه زمانی یک درخواست پیش‌پرواز (OPTIONS) ارسال می‌کند؟

یک درخواست پیش‌پرواز زمانی ارسال می‌شود که درخواست "ساده" نباشد، مثلاً هنگام استفاده از متدهایی مانند POST با انواع محتوای خاص یا هنگام ارسال هدرهایی مانند Authorization یا هدرهای سفارشی X-*. مرورگر قبل از ارسال درخواست واقعی، مجوزها را از طریق OPTIONS بررسی می‌کند.

چرا "Access-Control-Allow-Origin: *" همراه با احراز هویت خطرناک است؟

مرورگرها در صورت درگیر بودن احراز هویت، به یک مبدا صریح نیاز دارند. استفاده از wildcard همراه با احراز هویت برای درخواست‌های دارای احراز هویت نامعتبر است و نشان‌دهنده یک پیکربندی پرخطر است. ترجیحاً یک لیست مجوز صریح از مبداهای مورد اعتماد داشته باشید.

چرا به Vary: Origin نیاز دارم؟

اگر سرور شما مقادیر مختلف Access-Control-Allow-Origin را بسته به مبدا درخواست برمی‌گرداند، کش‌ها باید بر اساس مبدا متفاوت باشند تا از ارائه پاسخ در نظر گرفته شده برای یک سایت به سایت دیگر جلوگیری شود. Vary: Origin به جلوگیری از اختلاط کش و مسائل امنیتی مرتبط کمک می‌کند.

آیا CORS می‌تواند API من را در برابر کلاینت‌های غیر مرورگر محافظت کند؟

خیر. CORS توسط مرورگرها اعمال می‌شود. اسکریپت‌هایی که خارج از مرورگر اجرا می‌شوند (مانند سرورها، curl، اپلیکیشن‌های موبایل) بدون توجه به CORS می‌توانند API شما را فراخوانی کنند. برای کنترل دسترسی واقعی از احراز هویت، مجوزدهی و محدودسازی نرخ استفاده کنید.

هنگام آزمایش درخواست پیش‌پرواز (preflight) چه چیزی را باید در «هدرهای درخواست» قرار دهم؟

هدرهایی که فرانت‌اند شما ارسال خواهد کرد را به صورت جدا شده با کاما فهرست کنید (مانند authorization، content-type، x-request-id). این کار Access-Control-Request-Headers را شبیه‌سازی می‌کند و بررسی می‌کند که آیا سرور آن‌ها را مجاز می‌داند یا خیر.

آیا قرار دادن URLها در اینجا امن است؟

این ابزار درخواست‌های سمت سرور به URL ارائه شده را انجام می‌دهد و اهداف شبکه خصوصی را مسدود می‌کند. از قرار دادن اطلاعات محرمانه در URLها (مانند توکن‌ها در رشته‌های پرس‌وجو) خودداری کنید و ترجیحاً از نقاط پایانی عمومی که به آن‌ها اعتماد دارید استفاده کنید.

Pro Tips

Best Practice

ترجیحاً از یک لیست مجاز از مبداهای مورد اعتماد به جای بازتاب هر Origin استفاده کنید. CORS را به عنوان یک پیکربندی حساس از نظر امنیتی در نظر بگیرید.

Best Practice

اگر از کوکی‌ها/احراز هویت استفاده می‌کنید، Access-Control-Allow-Credentials: true را تنظیم کنید و یک مبدا صریح (نه "*") را برگردانید.

Best Practice

هنگام اجازه دادن به چندین مبدا یا انتخاب پویای مبدای مجاز، Vary: Origin را اضافه کنید.

Best Practice

یک مقدار معقول برای Access-Control-Max-Age اضافه کنید تا تأخیر درخواست پیش‌پرواز برای APIهای پایدار کاهش یابد.

Best Practice

هم مسیر درخواست پیش‌پرواز و هم مسیر درخواست واقعی را آزمایش کنید؛ برخی تنظیمات هدرهای صحیح را برای GET برمی‌گردانند اما برای OPTIONS شکست می‌خورند.

CI Tip

گزارش‌های JSON را صادر کنید و آن‌ها را همراه با تغییرات پیکربندی دروازه API نگه دارید تا بتوانید به سرعت پسرفت‌ها را شناسایی کنید.

Additional Resources

Other Tools