نشت WebRTC
تست نشت WebRTC: تماس از طریق مرورگر چه چیزی از نشانی IP شما را آشکار میکند
بخشی از: آیا تماس اینترنتی (VoIP) امن است؟ تماس از مرورگر از چه چیزی محافظت میکند و چه چیزی را آشکار میکند
callfrombrowser.org را در Google بهعنوان منبع ترجیحی اضافه کنید
خلاصه
تست نشت WebRTC همه نشانیهای IPای را فهرست میکند که مرورگر شما از طریق WebRTC در اختیار یک صفحه وب میگذارد، تا بتوانید نشانیای را که قصد پنهان کردنش را داشتید پیدا کنید؛ معمولاً نشانی ارائهدهنده اینترنت شما وقتی VPN روشن است [1]. تماس از مرورگر با یک شماره تلفن، IP شما را به سرویس تماس نشان میدهد، نه به کسی که با او تماس میگیرید؛ او فقط شناسه تماسگیرنده را میبیند [2]. این تست یکی از بررسیهای حریم خصوصی و امنیت است که پیش از تماس از مرورگر پیشنهاد میکنم.
نکات کلیدی
- قواعد WebRTC در IETF میگویند VPN با تونلسازی تقسیمشده (split tunnel) ممکن است به WebRTC اجازه دهد علاوه بر نشانی عمومی VPN، نشانی عمومی ارائهدهنده اینترنت شما را هم پیدا کند [1]. بررسیشده در .
- در بررسی محلی من روی Chrome 156، صفحهای که اجازه میکروفون نداشت کامپیوتر مرا فقط با یک نام تصادفی .local میدید؛ با اجازه میکروفون، نشانی محلی واقعی من را دریافت کرد [3][1]. بررسیشده در .
- Messenger میگوید تماسهای دونفره نشانی IP شما را با دستگاه طرف مقابل به اشتراک میگذارند [4]؛ تنظیم Protect IP address in calls در WhatsApp تماسها را بهجای آن از سرورهای خودش عبور میدهد [5]. بررسیشده در .
نشت WebRTC چیست؟
پیش از یک تماس WebRTC، مرورگر مسیرهای شبکهای ممکن را که «کاندیداهای ICE» نام دارند جمع میکند و به صفحه وب میدهد تا به طرف دیگر برساند. هر کدام یک نشانی IP دارد، یا بهجای نشانی محلیِ پنهانشده یک نام تصادفی .local. یک وبسایت معمولی فقط نشانی عمومیای را میبیند که درخواست شما از آن آمده است؛ اما صفحه از طریق WebRTC میتواند بیشتر بفهمد [1]. نشت یعنی هر نشانیای در آن فهرست که قصد نداشتید به اشتراک بگذارید.
اینکه بقیه تماس چطور منتقل میشود در WebRTC، SIP و شبکه تلفن آمده است؛ برای نشت، فقط فهرست کاندیداها مهم است. MDN یادآوری میکند که نشانیهای این فهرست همیشه در معرض صفحه قرار دارند [6].
| نوع کاندیدا | نشانیای که نشان میدهد | خطر برای حریم خصوصی |
|---|---|---|
| host | نشانی دستگاه شما در شبکه محلی، یا اگر مرورگر آن را پنهان کند، یک نام تصادفی که به .local ختم میشود [7][3] | کمتر از نشانی عمومی، اما IETF نشانیهای خصوصی IPv4 را سطح نسبتاً مهمی برای انگشتنگاری (fingerprinting) میداند [1] |
| srflx (server reflexive) | نشانی عمومیای که روتر یا VPN شما به سرور STUN نشان میدهد [7] | زیاد، اگر وقتی VPN روشن است نشانی ارائهدهنده اینترنت شما باشد [1] |
| relay | نشانیای روی سرور TURN که صدا و تصویر را دستبهدست میکند [7] | کم: طرف مقابل نشانی رله را میبیند، نه نشانی شما را [6]؛ اما گرداننده رله همچنان شما را میبیند |
IETF حالت VPN را مهمترین مورد میداند، چون برخی افراد برای ناشناس ماندن از VPN استفاده میکنند [1]. دو حالت دیگر، نشانی خصوصی شما و پراکسیای است که بررسیهای WebRTC آن را دور میزنند و در نتیجه نشانی عمومی واقعی شما آشکار میشود [1].
آیا تماس از مرورگر نشانی IP شما را آشکار میکند؟
برای سرویس تماس، بله: هر وبسایتی نشانی عمومی شما را میبیند [1] و تماس یک اتصال صوتی هم به سرورهای سرویس اضافه میکند. برای کسی که با تلفن ثابت یا موبایلش تماس میگیرید، نه: تماس در درگاه (گیتوی) ارائهدهنده از اینترنت خارج میشود [8] و شبکه تلفن یک شماره تماسگیرنده منتقل میکند، نه نشانی IP [2]. تماسهای اپلیکیشنبهاپلیکیشن ممکن است دو دستگاه را مستقیم به هم وصل کنند.
| نوع تماس | سرویس | کسی که با او تماس میگیرید |
|---|---|---|
| از مرورگر به شماره تلفن (Google Voice، TwinPhone، Yolla) | بله: اتصال صوتی را خودش اداره میکند | نه: او شناسه تماسگیرنده را میبیند [2] |
| شمارهگیرهای رایگان تحت وب (Call2Friends، Globfone) | بله: Call2Friends تماسهای رایگان را برای هر نشانی IP محدود میکند، و سیاست حریم خصوصی Globfone نشانیهای IP را جزو دادههای فنی و گزارشهایی میآورد که پردازش میکند [9][10] | نه: او شناسه تماسگیرنده را میبیند |
| Messenger، تماس دونفره | بله | بله: Meta میگوید IP شما با دستگاه طرف مقابل به اشتراک گذاشته میشود [4] |
| بله | ممکن است، مگر اینکه Protect IP address in calls روشن باشد؛ تماسهای گروهی همیشه از رله عبور میکنند [5] | |
| Telegram | بله | ممکن است: اطلاعیه سال 2017 Telegram میگوید تماسها هر وقت ممکن باشد نظیربهنظیر (peer-to-peer) برقرار میشوند [11] |
در تماس با شمارههای واقعی، پرسش اصلی این است که سرویس چه چیزی میفهمد و نگه میدارد؛ اینکه کسی که با او تماس میگیرید بهجای آن چه میبیند در وقتی از مرورگر تماس میگیرید کدام شماره نمایش داده میشود آمده است.
چطور تست نشت WebRTC انجام دهید
صفحه تست نشت همان کاری را میکند که یک شمارهگیر پیش از تماس انجام میدهد: یک اتصال WebRTC باز میکند، از یک سرور STUN میپرسد چه نشانی عمومیای میبیند، و هر کاندیدا را کنار نشانیای که از طریق HTTP معمولی میبیند نمایش میدهد. آن را در هر مرورگری که با آن تماس میگیرید اجرا کنید، اول با VPN خاموش و بعد با VPN روشن.
- VPN خاموش: یک صفحه تست نشت باز کنید، مثل WebRTC Leak Test در BrowserLeaks. «Your Remote IP» در بالای صفحه و «Public IP Address» زیر «Your WebRTC IP» باید یکی باشند.
- VPN روشن: صفحه را دوباره بارگذاری کنید. حالا «Your Remote IP» باید نشانی VPN را نشان دهد.
- اگر بخش WebRTC همچنان نشانی ارائهدهنده اینترنت شما را فهرست میکند، WebRTC از کنار تونل عبور میکند [1].
- مورد محلیای که به .local ختم میشود یعنی نشانی پنهان است [3]؛ نشانی خامی که با 192.168. یا 10. شروع میشود پنهان نیست.
- اگر صفحه بررسی میکروفون پیشنهاد میدهد، اجازه دهید و دوباره تست کنید: شمارهگیر به دسترسی میکروفون نیاز دارد و همین اجازه میتواند نشانیهای بیشتری را باز کند [1]. بعد از آن، اجازه را در تنظیمات سایت حذف کنید [12].
در Chrome با اجازه دادن به میکروفون چه چیزی تغییر کرد
در یک صفحه تست محلی را در Chrome 156 روی Mac باز کردم، بدون سرور STUN، تا هیچ نشانیای به سرور بیرونی نرود. بدون اجازه میکروفون، صفحه یک کاندیدای host دید که با یک رشته تصادفی ختمشونده به .local نامگذاری شده بود [3]. با اجازه میکروفون، نشانی IPv4 محلی واقعی مرا دریافت کرد.
این با استاندارد جور است که فهرست کامل نشانیها را فقط با رضایت کاربر، مثل اجازه میکروفون، مجاز میداند [1]؛ WebKit، موتور Safari، همین قاعده را در سال 2017 شرح داده بود [13]. پس شمارهگیری که به آن اجازه میدهید میتواند نشانی محلی شما را ببیند: خطری کمتر از دیده شدن نشانی عمومیتان [1].
تنظیمات مرورگر که نشت WebRTC را محدود میکنند
Brave یک تنظیم IP مربوط به WebRTC را برای کاربران مستند کرده است. Google کنترلهای Chrome را برای افزونهها و مدیران سیستم مستند میکند و Microsoft کنترل Edge را بهصورت یک سیاست مدیریتی. Firefox نشانیهای محلی را بهطور پیشفرض پنهان میکند و یک کلید خاموشکردن در about:config دارد. یک قاعده همه جا صدق میکند: خاموش کردن WebRTC شمارهگیرهای مرورگری را هم از کار میاندازد، چون WebRTC است که تماس را منتقل میکند [14].
| مرورگر | کنترل | چه چیزی را تغییر میدهد | اثر بر تماس از مرورگر |
|---|---|---|---|
| Brave | سیاست WebRTC IP handling در تنظیمات حریم خصوصی، طبق ویکی Brave (آخرین ویرایش در 2018) [15] | گزینه Default Public Interface Only هیچ نشانی محلیای را آشکار نمیکند [15] | ممکن است صدا و تصویر به سرور رله منتقل شود [1] |
| Chrome | افزونهها میتوانند سیاست WebRTC IP handling را تنظیم کنند [16]؛ مدیران سیستم میتوانند سیاست WebRtcIPHandling را تعیین کنند [17] | بسته به مقدار، استفاده از نشانیهای خصوصی را متوقف میکند یا صدا و تصویر را فقط از طریق پراکسی میفرستد [17] | مقادیر فقطپراکسی ممکن است صدا را روی TCP ببرند که به گفته IETF کیفیت را پایین میآورد [1] |
| Edge | سیاست مدیریتی WebRtcLocalhostIpHandling [18] | دو مقدار از مقادیر آن آشکار شدن نشانی IP محلی را متوقف میکنند [18] | مانند Chrome |
| Firefox | نشانیهای محلی بهطور پیشفرض پنهاناند [19]؛ media.peerconnection.enabled در about:config [20] | false کردن این تنظیم WebRTC را خاموش میکند | شمارهگیرهای مرورگری از کار میافتند |
| Safari | قاعده داخلی | صفحههایی که دسترسی به میکروفون یا دوربین ندارند هیچ نشانی host دریافت نمیکنند، آنطور که WebKit در 2017 شرح داد [13] | بدون اثر |
VPN چه چیزی را در تماس از مرورگر تغییر میدهد
VPNای که همه ترافیک، از جمله WebRTC، را از تونل خود عبور میدهد، بهجای نشانی شما نشانی VPN را به سرویس تماس نشان میدهد. VPN با تونلسازی تقسیمشده ممکن است به WebRTC اجازه دهد نشانی ارائهدهنده اینترنت شما را هم پیدا کند [1]؛ برای همین تست نشت را باید با VPN روشن هم انجام داد. VPN روی تماسها عوارض جانبی هم دارد.
- برخی سرویسها VPN را محدود میکنند: شرایط استفاده TextNow میگوید ممکن است استفاده از آن را محدود کند [21].
- برخی شمارهگیرهای رایگان، مثل Call2Friends، تماسهای رایگان را بر اساس نشانی IP سهمیهبندی میکنند [9]، پس روی VPN ممکن است این سهمیه را با کاربران دیگری که همان نشانی خروجی را دارند شریک باشید.
- اجبار صدا و تصویر به عبور از پراکسیای که نمیتواند UDP را منتقل کند، صدا را روی TCP میبرد که به گفته IETF کیفیت را پایین میآورد [1].
- سرویس همچنان حساب و سوابق تماس شما را میبیند؛ برای مثال Google ممکن است شمارهها، زمان و مدت تماسها را ثبت کند [22].
چطور نشانی IP خود را در تماسها خصوصی نگه دارید
راهحل را با نوع تماس جور کنید. در تماس با شماره تلفن، کسی که با او تماس میگیرید IP شما را دریافت نمیکند؛ پس سرویسی را انتخاب کنید که به آن اعتماد دارید و VPN خود را بررسی کنید. در تماسهای اپلیکیشنبهاپلیکیشن، دستگاه طرف مقابل ممکن است مستقیم به دستگاه شما وصل شود؛ پس اگر اپلیکیشن تنظیم رله دارد از آن استفاده کنید.
- تماس از مرورگر: تست نشت را با VPN روشن اجرا کنید؛ در Brave گزینه Default Public Interface Only را انتخاب کنید [15].
- میکروفون: در شمارهگیرهایی که یک بار استفاده میکنید، اجازه را با «Allow this time» (فقط این بار) بدهید [12]؛ در بررسی من در Chrome، صفحهای که این اجازه را داشت میتوانست نشانی محلی را ببیند.
- WhatsApp: گزینه Protect IP address in calls را روشن کنید. صفحه راهنمای آن Android، iOS و Mac را پوشش میدهد، نه نسخه وب را، و هشدار میدهد که تماسهایی که از رله عبور میکنند ممکن است کمی افت کیفیت داشته باشند [5].
پرسشهای متداول
تست نشت WebRTC چیست؟
تست نشت WebRTC صفحهای وب است که همان مراحل برقراری اتصالی را اجرا میکند که تماس از مرورگر به کار میبرد، و همه نشانیهای IPای را که مرورگر شما ارائه میدهد کنار نشانیای که صفحه از طریق HTTP معمولی میبیند فهرست میکند. اگر وقتی VPN روشن است نشانی ارائهدهنده اینترنت شما در آن فهرست باشد، یعنی WebRTC از کنار تونل عبور میکند [1]؛ یک نام تصادفی .local یعنی نشانی محلی شما پنهان است [3].
آیا کسی که از مرورگر با او تماس میگیرم IP مرا میبیند؟
نه، در تماس با تلفن ثابت یا موبایل نه. ارائهدهنده، صدای مرورگر شما را در درگاه خود به تماس تلفنی تبدیل میکند [23] و شبکه تلفن یک شماره تماسگیرنده منتقل میکند، نه نشانی IP [2]. تماسهای اپلیکیشنبهاپلیکیشن فرق دارند: Messenger میگوید تماسهای دونفره IP شما را با دستگاه طرف مقابل به اشتراک میگذارند [4].
آیا VPN جلوی نشت WebRTC را میگیرد؟
VPNای که همه ترافیک، از جمله WebRTC، را از تونل خود عبور دهد، بله. VPN با تونلسازی تقسیمشده ممکن است نه، چون WebRTC میتواند نشانی عمومی ارائهدهنده اینترنت شما را در کنار نشانی VPN پیدا کند [1]. تنها راه فهمیدنش تست نشت با VPN وصلشده است، در هر مرورگری که استفاده میکنید، و تکرار آن پس از هر بهروزرسانی.
آیا نشت نشانی IP محلی خطرناک است؟
کمتر از نشت نشانی عمومی. نشانی خصوصیای مثل 192.168.1.20 نمیگوید شما کجا هستید، اما IETF نشانیهای خصوصی IPv4 را سطح نسبتاً مهمی برای انگشتنگاری میداند که میتواند نشستهای مرور عادی و خصوصی روی یک دستگاه را به هم ربط دهد [1]. Firefox نشانیهای محلی را بهطور پیشفرض پنهان میکند [19]، Safari آنها را از صفحههایی که دسترسی به میکروفون یا دوربین ندارند پنهان میکند [13]، و در بررسی من Chrome هم همین کار را کرد.
آیا حالت ناشناس (Incognito) یا مرور خصوصی جلوی نشت WebRTC را میگیرد؟
نه. IETF یادآوری میکند که نشانی خصوصیای که از طریق WebRTC آشکار شود میتواند مثل یک شناسه عمل کند و به سایت بگوید یک پنجره عادی و یک پنجره مرور خصوصی روی یک دستگاهاند [1]، پس حالت خصوصی بهتنهایی آن را پنهان نمیکند. از تنظیمات مرورگر که بالاتر آمد استفاده کنید و بعد تست نشت را در یک پنجره خصوصی هم اجرا کنید.
آیا افزونههای جلوگیری از نشت WebRTC کار میکنند؟
تا حدی. در Chrome، افزونه میتواند سیاست WebRTC IP handling مرورگر را تنظیم کند؛ Google این را بدهبستانی میان عملکرد صدا و تصویر و میزان آشکار شدن اطلاعات نشانی محلی توصیف میکند [16]. بسته به مقدار، این کار نشانیهای محلی را پنهان میکند یا صدا و تصویر را به عبور از پراکسی وادار میکند، که ممکن است صدا را روی TCP ببرد و کیفیت را پایین بیاورد [1]. پس از نصب افزونه، با یک تست نشت تغییر را تأیید کنید.
چطور WebRTC را در Firefox خاموش کنم؟
در نوار نشانی about:config را تایپ کنید، media.peerconnection.enabled را جستوجو کنید و آن را روی false بگذارید. کد منبع Mozilla این تنظیم را کلید RTCPeerConnection توصیف میکند و خاموش کردنش دسترسی صفحهها به API میکروفون را هم حذف میکند [20]. در این حالت همه شمارهگیرهای مرورگری از کار میافتند، پس برای بیشتر کسانی که تماس میگیرند همان پیشفرض Firefox بهتر است که خودش نشانیهای محلی را پنهان میکند [19].
چطور نشت WebRTC را در Chrome متوقف کنم؟
از طریق یک افزونه یا یک policy، چون Google کنترلهای نشانی WebRTC در Chrome را برای همین دو مستند کرده است. افزونه میتواند سیاست مدیریت IP در WebRTC را تنظیم کند [16] و مدیران سیستم میتوانند WebRtcIPHandling را تنظیم کنند که مقدار default_public_interface_only آن مانع استفاده WebRTC از نشانیهای خصوصی میشود [17]. در بررسی من در Chrome، صفحهای بدون اجازه میکروفون از قبل فقط یک نام تصادفی .local میدید [3]. پشت VPN، راهحل واقعی تونلی است که همه ترافیک را منتقل کند [1]. هر چیزی که WebRTC را کاملاً مسدود کند، تماس مرورگری را هم متوقف میکند [14].
آیا یک وبسایت میتواند بدون اجازه از طریق WebRTC آیپی من را ببیند؟
نشانی عمومی شما را بله، اما وبسایتها آن را به هر حال میبینند: برای نمونه Safari به صفحههای بدون دسترسی میکروفون فقط نشانیهایی را میدهد که یک وبسایت از قبل میتوانست جمع کند [13]. نکته در پروکسی مرورگر است. اگر دسترسی مستقیم به اینترنت مجاز باشد، بررسیهای STUN در WebRTC میتوانند پروکسی را دور بزنند و نشانی عمومی واقعی شما را آشکار کنند [1]. نشانیهای محلی بهتر محافظت میشوند: استاندارد، فهرست کامل را به رضایتی مانند اجازه میکروفون گره میزند [1] و در بررسی من در Chrome، صفحهای بدون این اجازه فقط یک نام تصادفی .local میدید [3].
درباره این پژوهش از هوش مصنوعی بپرسید
هر دکمه دستیار را در تب تازهای باز میکند و از آن میخواهد این صفحه را خلاصه کند و پیوندش را بهعنوان منبع بیاورد.
منابع
- RFC 8828: WebRTC IP Address Handling Requirements · IETF (RFC Editor) · بررسیشده در 10 آبان 1405
- 47 CFR 64.1601 -- Delivery requirements and privacy restrictions | eCFR · US Code of Federal Regulations (eCFR) · بررسیشده در 10 آبان 1405
- Using Multicast DNS to protect privacy when exposing ICE candidates (draft-ietf-mmusic-mdns-ice-candidates) · IETF (Internet-Draft, work in progress) · بررسیشده در 10 آبان 1405
- Voice call someone or a group on Messenger - Messenger Help Center (Computer) · بررسیشده در 10 آبان 1405
- How to protect your IP address on WhatsApp calls | WhatsApp Help Center · WhatsApp · بررسیشده در 10 آبان 1405
- RTCIceCandidate: address property - Web APIs | MDN · MDN Web Docs (Mozilla) · بررسیشده در 10 آبان 1405
- RTCIceCandidate: type property - Web APIs | MDN · MDN Web Docs (Mozilla) · بررسیشده در 10 آبان 1405
- Make calls | Sonetel help · بررسیشده در 10 آبان 1405
- Free call | Call2Friends - Online call · بررسیشده در 10 آبان 1405
- Privacy Policy | Globfone · بررسیشده در 10 آبان 1405
- Voice Calls: Secure, Crystal-Clear, AI-Powered | Telegram Blog (30 March 2017) · Telegram · بررسیشده در 10 آبان 1405
- Use your camera and microphone in Chrome - Computer - Google Chrome Help · Google · بررسیشده در 10 آبان 1405
- A Closer Look Into WebRTC | WebKit (3 July 2017) · WebKit (Apple) · بررسیشده در 10 آبان 1405
- WebRTC API - Web APIs | MDN · MDN Web Docs (Mozilla) · بررسیشده در 10 آبان 1405
- WebRTC Custom Settings · brave/brave-browser Wiki · Brave Software (official GitHub wiki) · بررسیشده در 10 آبان 1405
- chrome.privacy | API | Chrome for Developers · Google (Chrome for Developers) · بررسیشده در 10 آبان 1405
- Chrome Enterprise policy list: WebRtcIPHandling (WebRTC IP handling) · Google (Chrome Enterprise) · بررسیشده در 10 آبان 1405
- Microsoft Edge Browser Policy Documentation WebRtcLocalhostIpHandling | Microsoft Learn · Microsoft · بررسیشده در 10 آبان 1405
- Firefox source: modules/libpref/init/all.js (mozilla-firefox/firefox) · Mozilla (official Firefox source repository) · بررسیشده در 10 آبان 1405
- Firefox source: modules/libpref/init/StaticPrefList.yaml (mozilla-firefox/firefox) · Mozilla (official Firefox source repository) · بررسیشده در 10 آبان 1405
- Terms of Use – TextNow · بررسیشده در 10 آبان 1405
- Privacy Policy – Privacy & Terms – Google · Google · بررسیشده در 10 آبان 1405
- Call From Your Browser Without a SIM Card - TwinPhone · بررسیشده در 10 آبان 1405