API مکان جغرافیایی از مبداهای ناامن در Chrome 50 حذف شد

Chrome قصد دارد ویژگی‌های قدرتمندی مانند مکان‌یابی جغرافیایی در مبادی غیرایمن را از بین ببرد و امیدواریم دیگران نیز از آنها پیروی کنند.

با شروع Chrome 50، Chrome دیگر از به دست آوردن موقعیت مکانی کاربر با استفاده از HTML5 Geolocation API از صفحات ارائه شده توسط اتصالات غیر ایمن پشتیبانی نمی کند. این بدان معنی است که صفحه ای که تماس API جغرافیایی را برقرار می کند باید از یک زمینه امن مانند HTTPS ارائه شود.

این یک مسئله مهم است زیرا مستقیماً بر هر سایتی که نیاز به استفاده از API موقعیت جغرافیایی دارد و از طریق https ارائه نمی شود تأثیر می گذارد، اما ما معتقدیم این تغییری است که برای همه کاربران در وب مفید است. این پست باید به شما در درک دلیل و چگونگی ادامه کمک کند.

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

این تغییر از Chrome 50 (12:00 PST 20 آوریل 2016) اعمال می شود.

کنسول ابزار توسعه کروم از نسخه 44 (منتشر شده در 21 ژوئیه 2015) هشدارهایی را ارائه کرده است.
تعدادی از اعلامیه های عمومی وجود دارد که دلیل (و بحث) چرایی ایجاد این تغییر را توضیح می دهد:

تعدادی از منابع دیگر نیز وجود داشته اند که این موضوع را برجسته کرده اند: Mobiforge (26 ژانویه 2016)، Wired (17 مارس 2016)، VentureBeat (13 آوریل 2016).

چرا این تغییر را ایجاد می کنیم؟

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

این روی چه کسی تاثیر می گذارد؟

این روی هر صفحه ای که در حال حاضر از API مکان جغرافیایی از صفحات ارائه شده از طریق HTTP (غیر ایمن) استفاده می کند، تأثیر می گذارد. همچنین اگر در صفحات HTTP جاسازی شده باشند، بر روی iframe های HTTPS که از API مکان جغرافیایی استفاده می کنند نیز تأثیر می گذارد. (شما نمی توانید با استفاده از یک قاب به اشتراک گذاشته شده توسط HTTPS پر کنید.)

آیا کل برنامه وب من به HTTPS نیاز دارد؟

برای استفاده از موقعیت جغرافیایی، الزامی نیست که کل برنامه از طریق HTTPS ارائه شود. فقط صفحاتی که از موقعیت جغرافیایی استفاده می کنند باید در یک زمینه امن ارائه شوند. یک زمینه امن در حال حاضر هر چیزی است که در سطح بالا در HTTPS یا میزبان محلی میزبانی می شود. برای مثال، یک iframe که به یک مبدا امن اشاره می‌کند اما در مبدأ ناامن ( http ://paul.kinlan.me/ ) میزبانی می‌شود، مجاز به فراخوانی API مکان جغرافیایی نیست.

ما قویاً پیشنهاد می‌کنیم که به HTTPS مهاجرت کنید زیرا ویژگی‌های قدرتمند جدید و موجود مرورگر به منابع امن نیاز دارند .

آیا این بر توسعه محلی تأثیر می گذارد؟

نباید، لوکال هاست به عنوان "بالقوه ایمن" در مشخصات اعلام شده است و در مورد ما درخواست های موقعیت جغرافیایی ارائه شده در سطح بالا بر روی لوکال هاست همچنان کار خواهند کرد.

آیا می توانم در زمان اجرا تشخیص دهم که آیا موقعیت جغرافیایی به دلیل قرار نداشتن در زمینه ایمن مسدود شده است؟

آره. مشخصات مکان جغرافیایی یک شیء PositionError را تعریف می کند که به تماس با شکست API های Geolocation ارسال می شود. شی یک code و خصوصیات message را تعریف می کند.

خطاهای ناشی از این مشکل زمینه ایمن code 1 را برمی گرداند که یک "خطای رد مجوز" است. زمانی می توانید این خطا را دریافت کنید که کاربر دسترسی را رد کرده باشد یا سیستم دسترسی به مکان های کاربر را رد کرده باشد. این بدان معنی است که شما باید پیام را بررسی کنید تا ببینید دلیل دقیق آن چیست.

این می تواند بسیار شکننده باشد زیرا ممکن است در آینده تغییر کند، اما یک سیگنال قوی مبنی بر اینکه مشکل محتوای غیرایمن است، جستجوی رشته "فقط مبداهای امن مجاز هستند" است.

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

به یاد داشته باشید، شما نمی توانید فقط مبدا صفحه را بررسی کنید، زیرا صفحه شما ممکن است در https باشد، اما در داخل یک iframe است که از یک زمینه ناامن میزبانی می شود.

من واقعاً نیاز به استفاده از موقعیت جغرافیایی دارم. باید چکار کنم؟

اگر می‌خواهید از HTML5 Geolocation API استفاده کنید، یا اگر سایت شما قبلاً از Geolocation API استفاده می‌کند، لطفاً صفحاتی را که تماس‌های API جغرافیایی را انجام می‌دهند به HTTPS منتقل کنید و مطمئن شوید که در یک زمینه امن استفاده می‌شوند.

تعدادی گزینه بازگشتی برای دریافت موقعیت مکانی کاربر وجود دارد که تحت تأثیر این تغییر قرار نمی‌گیرند، مانند Google Maps Geolocation API ، GeoIP (به عنوان مثال، راه‌حل‌های دیگر مبتنی بر جغرافیا وجود دارد)، و کد پستی وارد شده توسط کاربر. با این حال، ما قویاً توصیه می کنیم که بهترین راه برای اطمینان از دسترسی مداوم به موقعیت جغرافیایی، انتقال به HTTPS است.