بررسیکننده CORS
پیکربندی اشتراکگذاری منابع مبدأ متقاطع (CORS) را برای هر URL بررسی کنید. هدرهای پاسخ Access-Control-* را بازرسی کنید، یک درخواست پیشپرواز اختیاری (OPTIONS) با مبدأ/روش/هدرهای سفارشی اجرا کنید و پیکربندیهای اشتباه رایج مانند کاراکتر عمومی + اعتبارنامهها، فقدان Vary: Origin یا 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
وارد کردن URL هدف
نقطه پایانی که میخواهید آزمایش کنید را جایگذاری کنید (مثلاً https://api.example.com/resource).
تنظیم مبدأیی که از آن آزمایش میکنید
مبدأ برنامه فرانتاند خود را وارد کنید (طرح + میزبان)، مثلاً https://app.example.com. این مقداری است که مرورگرها در هدر Origin ارسال میکنند.
انتخاب حالت بررسی
از حالت خودکار (توصیه شده) برای تحلیل هم هدرهای پاسخ و هم رفتار پیشپرواز استفاده کنید. از درخواست ساده اگر به طور خاص یک سناریوی غیر پیشپرواز میخواهید، یا فقط پیشپرواز برای اجرای بررسیهای OPTIONS استفاده کنید.
پیکربندی جزئیات پیشپرواز (در صورت لزوم)
«اجرای پیشپرواز (OPTIONS)» را فعال کنید و روش درخواست به علاوه هدرهای درخواست (جدا شده با کاما) را برای شبیهسازی رفتار واقعی پیشپرواز مرورگر تنظیم کنید (مثلاً مجوز، نوع محتوا). اگر مورد استفاده شما شامل کوکیها یا هدرهای احراز هویت است، «در نظر گرفتن اعتبارنامهها» را تغییر دهید.
مرور یافتهها و خروجی گرفتن
یافتهها/کارت امتیاز و جزئیات تحلیل 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 و پیشپرواز از ترمینال خود استفاده کنید. برای اشکالزدایی و تأیید آنچه ابزار گزارش میدهد مفید هستند.
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 مسدود شد"
وقتی 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) ارسال میکند؟
❓چرا "Access-Control-Allow-Origin: *" همراه با احراز هویت خطرناک است؟
❓چرا به Vary: Origin نیاز دارم؟
❓آیا CORS میتواند API من را در برابر کلاینتهای غیر مرورگر محافظت کند؟
CORS توسط مرورگرها اعمال میشود. اسکریپتهایی که خارج از مرورگر اجرا میشوند (مانند سرورها، curl، اپلیکیشنهای موبایل) بدون توجه به CORS میتوانند API شما را فراخوانی کنند. برای کنترل دسترسی واقعی از احراز هویت، مجوزدهی و محدودسازی نرخ استفاده کنید.❓هنگام آزمایش درخواست پیشپرواز (preflight) چه چیزی را باید در «هدرهای درخواست» قرار دهم؟
❓آیا قرار دادن URLها در اینجا امن است؟
Pro Tips
ترجیحاً از یک لیست مجاز از مبداهای مورد اعتماد به جای بازتاب هر Origin استفاده کنید. CORS را به عنوان یک پیکربندی حساس از نظر امنیتی در نظر بگیرید.
اگر از کوکیها/احراز هویت استفاده میکنید، Access-Control-Allow-Credentials: true را تنظیم کنید و یک مبدا صریح (نه "*") را برگردانید.
هنگام اجازه دادن به چندین مبدا یا انتخاب پویای مبدای مجاز، Vary: Origin را اضافه کنید.
یک مقدار معقول برای Access-Control-Max-Age اضافه کنید تا تأخیر درخواست پیشپرواز برای APIهای پایدار کاهش یابد.
هم مسیر درخواست پیشپرواز و هم مسیر درخواست واقعی را آزمایش کنید؛ برخی تنظیمات هدرهای صحیح را برای GET برمیگردانند اما برای OPTIONS شکست میخورند.
گزارشهای JSON را صادر کنید و آنها را همراه با تغییرات پیکربندی دروازه API نگه دارید تا بتوانید به سرعت پسرفتها را شناسایی کنید.
Additional Resources
Other Tools
- زیباکننده CSS
- زیباکننده HTML
- زیباکننده JavaScript
- زیباکننده PHP
- انتخابگر رنگ
- استخراجکننده اسپرایت
- رمزگذار باینری Base32
- رمزگشای Base32
- رمزگذار Base32
- رمزگذار باینری Base58
- رمزگشای Base58
- رمزگذار Base58
- رمزگذار باینری Base62
- رمزگشای Base62
- رمزگذار Base62
- رمزگذار باینری Base64
- دیکودر Base64
- انکودر Base64
- رمزگذار باینری هگز
- رمزگشای هگز
- رمزگذار هگز
- فرمتدهنده C#
- فرمتدهنده CSV
- Dockerfile Formatter
- فرمتدهنده Elm
- فرمتدهنده ENV
- فرمتدهنده Go
- فرمتدهنده GraphQL
- فرمتدهنده HCL
- فرمتدهنده INI
- فرمتدهنده JSON
- فرمتدهنده LaTeX
- فرمتدهنده Markdown
- فرمتدهنده Objective-C
- Php Formatter
- فرمتدهنده Proto
- فرمتدهنده Python
- فرمتدهنده Ruby
- فرمتدهنده Rust
- فرمتدهنده Scala
- فرمتدهنده اسکریپت شل
- فرمتدهنده SQL
- قالببندی SVG
- قالببندی Swift
- قالببندی TOML
- Typescript Formatter
- قالببندی XML
- قالببندی YAML
- قالببندی Yarn
- کوچککننده CSS
- Html Minifier
- Javascript Minifier
- کوچککننده JSON
- کوچککننده XML
- Cache Headers Analyzer
- Csp Analyzer
- Dns Records Lookup
- نمایشگر هدرهای HTTP
- Http Status Checker
- Open Graph Meta Checker
- Redirect Chain Viewer
- Robots Txt Tester
- Security Headers Checker
- Security Txt Checker
- Sitemap Url Inspector
- Tls Certificate Checker
- PDF به متن
- تستکننده Regex
- بررسیکننده رتبه SERP
- جستجوی Whois