خطرات مرتبط با قرار گرفتن ناخواسته دستگاهها و سرورهای شبکه داخلی مشتری در معرض وب را به طور کلی کاهش دهید.
وبسایتهای مخرب که درخواستهایی را به دستگاهها و سرورهای میزبانیشده در یک شبکه خصوصی ارسال میکنند، مدتهاست که یک تهدید محسوب میشوند. برای مثال، مهاجمان ممکن است پیکربندی یک روتر بیسیم را تغییر دهند تا حملات مرد میانی را فعال کنند. CORS-RFC1918 پیشنهادی است برای مسدود کردن چنین درخواستهایی به طور پیشفرض در مرورگر و ملزم کردن دستگاههای داخلی به پذیرش درخواستهای اینترنت عمومی.
برای درک چگونگی تأثیر این تغییر بر اکوسیستم وب، تیم کروم به دنبال بازخورد از توسعهدهندگانی است که سرورهایی برای شبکههای خصوصی میسازند.
مگر وضع موجود چه اشکالی دارد؟
بسیاری از سرورهای وب در یک شبکه خصوصی اجرا میشوند - روترهای بیسیم، چاپگرها، وبسایتهای اینترانت، سرویسهای سازمانی و دستگاههای اینترنت اشیا (IoT) تنها بخشی از آنها هستند. ممکن است به نظر برسد که آنها در محیطی امنتر از آنهایی که در معرض دید عموم هستند، قرار دارند، اما این سرورها میتوانند توسط مهاجمانی که از یک صفحه وب به عنوان پروکسی استفاده میکنند، مورد سوءاستفاده قرار گیرند. به عنوان مثال، وبسایتهای مخرب میتوانند URL ای را جاسازی کنند که وقتی به سادگی توسط قربانی (در یک مرورگر با قابلیت جاوا اسکریپت) مشاهده میشود، سعی در تغییر تنظیمات سرور DNS در روتر پهنای باند خانگی قربانی دارد. این نوع حمله " Drive-By Pharming " نامیده میشود و در سال ۲۰۱۴ اتفاق افتاد . بیش از ۳۰۰۰۰۰ روتر بیسیم آسیبپذیر با تغییر تنظیمات DNS خود مورد سوءاستفاده قرار گرفتند و به مهاجمان اجازه دادند تا کاربران را به سرورهای مخرب هدایت کنند.
CORS-RFC1918
برای کاهش تهدید حملات مشابه، جامعه وب CORS-RFC1918 را ارائه میدهد - اشتراکگذاری منابع بینمنشأیی (CORS) که مختص شبکههای خصوصی تعریفشده در RFC1918 است.
مرورگرهایی که CORS را پیادهسازی میکنند، منابع هدف را بررسی میکنند که آیا بارگذاری آنها از مبدأ دیگری مشکلی ندارد یا خیر. این کار یا با هدرهای اضافی درونخطی که دسترسی را توصیف میکنند یا با استفاده از مکانیسمی به نام درخواستهای پیش از پرواز، بسته به پیچیدگی، انجام میشود. برای کسب اطلاعات بیشتر ، Cross Origin Resource Sharing را مطالعه کنید.
با CORS-RFC1918، مرورگر به طور پیشفرض بارگذاری منابع از طریق شبکه خصوصی را مسدود میکند، به جز مواردی که صریحاً توسط سرور با استفاده از CORS و از طریق HTTPS مجاز هستند. وبسایتی که به این منابع درخواست میدهد، باید هدرهای CORS را ارسال کند و سرور باید با پاسخ دادن به هدرهای CORS مربوطه، صریحاً اعلام کند که درخواست بینمرجعی را میپذیرد. ( هدرهای دقیق CORS هنوز در دست توسعه هستند.)
از توسعهدهندگان چنین دستگاهها یا سرورهایی خواسته میشود دو کار انجام دهند:
- مطمئن شوید وبسایتی که درخواستها را به یک شبکه خصوصی ارسال میکند، از طریق HTTPS ارائه میشود.
- پشتیبانی سرور را برای CORS-RFC1918 تنظیم کنید و با هدرهای HTTP مورد انتظار پاسخ دهید.
چه نوع درخواستهایی تحت تأثیر قرار میگیرند؟
درخواستهای تحت تأثیر عبارتند از:
- درخواستها از شبکه عمومی به یک شبکه خصوصی
- درخواستها از یک شبکه خصوصی به یک شبکه محلی
- درخواستها از شبکه عمومی به یک شبکه محلی
یک شبکه خصوصی مقصدی که به فضای آدرس خصوصی تعریف شده در بخش ۳ RFC1918 در IPv4 متصل میشود، یک آدرس IPv6 نگاشت شده با IPv4 که در آن آدرس IPv4 نگاشت شده خود خصوصی است، یا یک آدرس IPv6 خارج از زیرشبکههای ::1/128 ، 2000::/3 و ff00::/8 .
یک شبکه محلی ، مقصدی که به فضای "loopback" ( 127.0.0.0/8 ) تعریف شده در بخش 3.2.1.3 از RFC1122 از IPv4، فضای "link-local" ( 169.254.0.0/16 ) تعریف شده در RFC3927 از IPv4، پیشوند "Unique Local Address" ( fc00::/7 ) تعریف شده در بخش 3 از RFC4193 از IPv6، یا پیشوند "link-local" ( fe80::/10 ) تعریف شده در بخش 2.5.6 از RFC4291 از IPv6، متصل میشود.
یک شبکه عمومی و سایر موارد.

کروم قصد دارد CORS-RFC1918 را فعال کند
کروم CORS-RFC1918 را در دو مرحله ارائه میدهد:
مرحله ۱: درخواستها به منابع شبکه خصوصی فقط از صفحات وب HTTPS مجاز خواهند بود
کروم ۸۷ یک پرچم اضافه میکند که وبسایتهای عمومی که به منابع شبکه خصوصی درخواست میدهند را ملزم میکند که روی HTTPS باشند. میتوانید برای فعال کردن آن به about://flags#block-insecure-private-network-requests بروید. با فعال کردن این پرچم، هرگونه درخواست به یک منبع شبکه خصوصی از یک وبسایت HTTP مسدود خواهد شد.
با شروع از کروم ۸۸، خطاهای CORS-RFC1918 به عنوان خطاهای خطمشی CORS در کنسول گزارش میشوند.

در پنل Network در Chrome DevTools میتوانید کادر انتخاب Blocked Requests را فعال کنید تا روی درخواستهای مسدود شده تمرکز کنید:

در کروم ۸۷، خطاهای CORS-RFC1918 فقط در کنسول DevTools به صورت ERR_INSECURE_PRIVATE_NETWORK_REQUEST گزارش میشوند.
شما میتوانید خودتان با استفاده از این وبسایت آزمایشی آن را امتحان کنید.
مرحله ۲: ارسال درخواستهای پیش از پرواز با یک هدر ویژه
در آینده، هر زمان که یک وبسایت عمومی سعی در دریافت منابع از یک شبکه خصوصی یا محلی داشته باشد، کروم قبل از درخواست اصلی، یک درخواست پیشاجرا ارسال میکند.
این درخواست علاوه بر سایر هدرهای درخواست CORS، شامل یک هدر Access-Control-Request-Private-Network: true خواهد بود. در میان موارد دیگر، این هدرها مبدا درخواست را شناسایی میکنند و امکان کنترل دسترسی دقیق را فراهم میکنند. سرور میتواند با هدر Access-Control-Allow-Private-Network: true پاسخ دهد تا صریحاً نشان دهد که دسترسی به منبع را اعطا میکند.
بازخورد مورد نظر
اگر وبسایتی را در یک شبکه خصوصی میزبانی میکنید که انتظار درخواست از شبکههای عمومی را دارد، تیم کروم به بازخورد و موارد استفاده شما علاقهمند است. دو کار میتوانید برای کمک انجام دهید:
- به
about://flags#block-insecure-private-network-requestsبروید، پرچم را روشن کنید و ببینید آیا وبسایت شما طبق انتظار درخواستها را به منبع شبکه خصوصی ارسال میکند یا خیر. - اگر با هرگونه مشکلی مواجه شدید یا بازخوردی دارید، مشکل خود را در crbug.com ثبت کنید و کامپوننت را روی
Blink>SecurityFeature>CORS>RFC1918تنظیم کنید.
بازخورد نمونه
روتر بیسیم ما یک وبسایت مدیریتی را برای همان شبکه خصوصی اما از طریق HTTP ارائه میدهد. اگر HTTPS برای وبسایتهایی که وبسایت مدیریتی را در خود جای دادهاند لازم باشد، محتوای آن ترکیبی خواهد بود. آیا باید HTTPS را در وبسایت مدیریتی در یک شبکه بسته فعال کنیم؟
این دقیقاً همان نوع بازخوردی است که کروم به دنبال آن است. لطفاً مشکل خود را در مورد کاربرد خاص خود در crbug.com ثبت کنید. کروم دوست دارد از شما بشنود.