درخواست مجوز جدید برای دسترسی به شبکه محلی

کریس تامپسون
Chris Thompson

منتشر شده: ۹ ژوئن ۲۰۲۵

کروم به عنوان بخشی از مشخصات دسترسی به شبکه محلی، یک درخواست مجوز جدید برای سایت‌هایی که به شبکه محلی کاربر متصل می‌شوند، اضافه می‌کند. هدف از این کار محافظت از کاربران در برابر حملات جعل درخواست بین سایتی (CSRF) است که روترها و سایر دستگاه‌ها را در شبکه‌های خصوصی هدف قرار می‌دهند و کاهش توانایی سایت‌ها در استفاده از این درخواست‌ها برای شناسایی شبکه محلی کاربر.

برای درک چگونگی تأثیر این تغییر بر اکوسیستم وب، تیم کروم به دنبال بازخورد توسعه‌دهندگانی است که برنامه‌های وب را می‌سازند که به برقراری ارتباط با شبکه محلی کاربر یا نرم‌افزارهایی که به صورت محلی روی دستگاه کاربر اجرا می‌شوند، متکی هستند. از کروم ۱۳۸، می‌توانید با رفتن به chrome://flags/#local-network-access-check و تنظیم پرچم روی «فعال (مسدود کردن)» از این محدودیت‌های جدید استفاده کنید.

دسترسی به شبکه محلی چیست؟

دسترسی به شبکه محلی، توانایی وب‌سایت‌ها را برای ارسال درخواست به سرورهای شبکه محلی کاربر (از جمله سرورهایی که به صورت محلی روی دستگاه کاربر اجرا می‌شوند) محدود می‌کند و مستلزم آن است که کاربر قبل از ارسال چنین درخواست‌هایی، مجوز سایت را اعطا کند. امکان درخواست این مجوز به زمینه‌های امن محدود شده است.

پیامی با متن «به دنبال هر دستگاهی در شبکه محلی خود بگردید و به آن متصل شوید.»
نمونه‌ای از درخواست مجوز دسترسی به شبکه محلی کروم.

بسیاری از پلتفرم‌های دیگر، مانند اندروید ، iOS و MacOS، مجوز دسترسی به شبکه محلی دارند. برای مثال، ممکن است هنگام راه‌اندازی دستگاه‌های جدید Google TV و Chromecast، این مجوز را برای دسترسی به شبکه محلی به برنامه Google Home داده باشید.

چه نوع درخواست‌هایی تحت تأثیر قرار می‌گیرند؟

برای اولین مرحله از دسترسی به شبکه محلی، ما «درخواست شبکه محلی» را هر درخواستی از شبکه عمومی به یک شبکه محلی یا مقصد loopback در نظر می‌گیریم.

یک شبکه محلی هر مقصدی است که به آدرس‌های رزرو شده برای استفاده محلی تبدیل می‌شود. برای مثال، آدرس‌های IPv4 خصوصی که در بخش 3 RFC1918 مشخص شده‌اند (مثلاً 192.168.0.0/16 )، پیشوند "link-local" IPv4 ( 169.254.0.0/16 ) که در RFC3927 تعریف شده است، پیشوند "Unique Local Address" IPv6 ( fc00::/7 ) که در بخش 3 RFC4193 تعریف شده است، پیشوند "link-local" IPv6 ( fe80::/10 ) که در بخش 2.5.6 RFC4291 تعریف شده است، یا یک آدرس IPv6 نگاشت شده با IPv4 ( ::ffff:0:0/96 ) که در آن آدرس IPv4 نگاشت شده خود محلی است.

Loopback هر مقصدی است که به دستگاه محلی (یعنی رابط "loopback") منتهی می‌شود، مانند پیشوند loopback در IPv4 ( 127.0.0.0/8 ) که در بخش 3.2.1.3 از RFC1122 تعریف شده است، یا loopback در IPv6 ( ::1/128 ) که در بخش 2.5.3 از RFC4291 تعریف شده است.

برای نگاشت کامل آدرس‌های IP به فضاهای آدرس، به جدول موجود در مشخصات دسترسی به شبکه محلی مراجعه کنید.

یک شبکه عمومی هر مقصد دیگری است.

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

  • نام میزبان درخواست، یک IP خصوصی (مثلاً 192.168.0.1 ) است.
  • نام میزبان درخواست، یک دامنه .local است.
  • فراخوانی fetch() با گزینه targetAddressSpace: "local".
// Example 1: Private IP literal is exempt from mixed content.
fetch("http://192.168.0.1/ping");

// Example 2: `.local` domain is exempt from mixed content.
fetch("http://router.local/ping");

// Example 3: Public domain is not exempt from mixed content,
// even if it resolves to a local network address.
fetch("http://example.com/ping");

// Example 4: Adding the `targetAddressSpace` option flags that
// the request will go to the local network, and is thus exempt
// from mixed content.
fetch("http://example.com/ping", {
  targetAddressSpace: "local",
});

چه چیزهایی در کروم تغییر می‌کند؟

کروم ۱۳۸

نسخه اولیه دسترسی به شبکه محلی ما برای آزمایش اختیاری در کروم ۱۳۸ آماده است. کاربران می‌توانند با تنظیم chrome://flags#local-network-access-check روی "فعال (مسدود)" درخواست دسترسی به شبکه محلی را فعال کنند. این کار از فعال شدن درخواست دسترسی به شبکه محلی برای درخواست‌هایی که با استفاده از API جاوا اسکریپت fetch() آغاز می‌شوند، بارگذاری زیرمنابع و پیمایش زیرفریم پشتیبانی می‌کند.

یک سایت آزمایشی برای راه‌اندازی انواع مختلف درخواست‌های شبکه محلی در آدرس https://lna-testing.notyetsecure.com/ موجود است.

مشکلات و محدودیت‌های شناخته‌شده

  • اتصالات WebSockets ( crbug.com/421156866 )، WebTransport ( crbug.com/421216834 ) و WebRTC ( crbug.com/421223919 ) به شبکه محلی هنوز با مجوز LNA مسدود نشده‌اند.
  • درخواست‌های شبکه محلی از Service Workers و Shared Workers مستلزم آن است که مبدأ worker قبلاً مجوز دسترسی به شبکه محلی را دریافت کرده باشد.
    • اگر برنامه شما از یک سرویس ورکر درخواست شبکه محلی می‌کند، برای فعال کردن اعلان مجوز، باید جداگانه یک درخواست شبکه محلی از برنامه خود ایجاد کنید. (ما در حال کار بر روی روشی هستیم که در صورت وجود سند فعال، ورکرها بتوانند اعلان مجوز را فعال کنند - به crbug.com/404887282 مراجعه کنید.)

کروم ۱۳۹ و بالاتر

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

ما همچنین یک سیاست سازمانی کروم برای کنترل اینکه کدام سایت‌ها می‌توانند و کدام سایت‌ها نمی‌توانند درخواست‌های شبکه محلی ارسال کنند (اعطای مجوز قبلی یا رد مجوز قبلی به آن سایت‌ها) اضافه خواهیم کرد. این امر به نصب‌های مدیریت‌شده کروم، مانند آنهایی که در تنظیمات شرکتی هستند، اجازه می‌دهد تا از نمایش هشدار برای موارد استفاده شناخته‌شده در نظر گرفته‌شده جلوگیری کنند، یا سایت‌ها را بیشتر قفل کرده و از امکان درخواست مجوز به طور کلی جلوگیری کنند.

ما قصد داریم به ادغام مجوز دسترسی به شبکه محلی با ویژگی‌های مختلفی که می‌توانند درخواست‌ها را به شبکه محلی ارسال کنند، ادامه دهیم. به عنوان مثال، ما قصد داریم به زودی دسترسی به شبکه محلی را برای اتصالات WebSockets، WebTransport و WebRTC ارائه دهیم.

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

بازخورد مورد نظر

بازخوردهای قبلی در مورد توسعه دسترسی به شبکه خصوصی (Private Network Access) در هدایت ما به سمت رویکرد جدید مجوز دسترسی به شبکه محلی (Local Network Access) فوق‌العاده ارزشمند بود. بار دیگر از همه کسانی که در طول این سال‌ها مشارکت داشته‌اند، تشکر می‌کنیم.

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

  • به chrome://flags#local-network-access-check بروید، پرچم را روی «فعال (مسدود)» تنظیم کنید و ببینید آیا وب‌سایت شما به درستی درخواست مجوز جدید را فعال می‌کند (و پس از اعطای مجوز، مطابق انتظار عمل می‌کند).
  • اگر با هرگونه مشکلی مواجه شدید یا بازخوردی دارید، مشکل خود را در ردیاب مشکلات کرومیوم یا در مخزن گیت‌هاب مشخصات LNA ما ثبت کنید. کروم از شنیدن نظرات شما خوشحال خواهد شد.