ה-API של מיקום גיאוגרפי הוסר ממקורות לא מאובטחים ב-Chrome 50

Paul Kinlan
Paul Kinlan

ב-Chrome יש כוונה ציבורית של תכונות מתקדמות כמו מיקום גיאוגרפי במקורות לא מאובטחים, ואנחנו מקווים שגם פיצ'רים אחרים יפעלו בהתאם.

החל מגרסה 50 של Chrome, Chrome כבר לא תומך בהשגת מיקום המשתמש באמצעות HTML5 Geolocation API מדפים שהועברו על ידי חיבורים לא מאובטחים. המשמעות היא שהדף שמבצע את הקריאה ל-Geolocation API חייב להיות מוצג מהקשר מאובטח, למשל HTTPS.

מדובר בבעיה חשובה כי היא תשפיע ישירות על כל אתר שמחייב שימוש ב-geolocation API ולא מוצג ב-https, אבל אנחנו סבורים שמדובר בשינוי שיחול על הדעת לכל המשתמשים באינטרנט. הפוסט הזה יעזור לכם להבין את הנימוקים ולהבין איך להמשיך.

מתי זה קורה?

השינוי הזה ייכנס לתוקף ב-Chrome 50 (12:00 לפי שעון החוף המערבי של ארה"ב 20 באפריל 2016).

מסוף הכלים למפתחים של Chrome מציג אזהרות מאז גרסה 44 (הושק ב-21 ביולי 2015).
פרסמנו כמה הודעות לציבור שמתארות את הנימוקים לשינוי הזה (ואת הדיון):

מספר מקורות אחרים הדגישו זאת: Mobiforge (26 בינואר 2016), Wired (17 במרץ 2016), VentureBeat (13 באפריל 2016).

מדוע Google מבצעת שינוי זה?

המיקום הוא מידע אישי רגיש! הדרישה לשימוש ב-HTTPS נדרשת כדי להגן על הפרטיות של נתוני המיקום של המשתמשים. אם המיקום של המשתמש זמין בהקשר לא מאובטח, תוקפים ברשת יוכלו לדעת איפה המשתמש נמצא, וזה פוגע באופן חמור בפרטיות המשתמשים.

על מי השינוי הזה משפיע?

הבעיה הזו משפיעה על כל דף שמשתמש כרגע ב-Geolocation API מתוך דפים שמוצגים באמצעות HTTP (לא מאובטח). היא משפיעה גם על מסגרות iframe של HTTPS שמשתמשות ב-Geolocation API אם הן מוטמעות בדפי HTTP. (לא ניתן יהיה לבצע polyfill באמצעות מסגרת משותפת שהועברה על ידי HTTPS).

האם כל אפליקציית האינטרנט שלי צריכה להשתמש ב-HTTPS?

זו לא דרישה שכל האפליקציה תוצג באמצעות HTTPS כדי להשתמש במיקום גיאוגרפי. צריך להציג רק דפים שנעשה בהם שימוש במיקום גיאוגרפי באמצעות הקשר מאובטח. כרגע, הקשר מאובטח הוא כל מה שמתארח ברמה העליונה ב-HTTPS או ב-localhost. לדוגמה, רכיב iframe שמפנה למקור מאובטח אבל מתארח במקור לא מאובטח (http ://paul.kinlan.me/) לא יורשה לקרוא ל-geolocation API.

מומלץ מאוד לעבור ל-HTTPS, כי תכונות הדפדפן החדשות והקיימות מחייבות מקורות מאובטחים.

האם זה משפיע על הפיתוח המקומי?

אסור, על Localhost הוצהר שהמפרט הוא 'מאובטח באופן פוטנציאלי', ובמקרה שלנו בקשות למיקום גיאוגרפי שהוגשו ברמה העליונה באמצעות Localhost ימשיכו לעבוד.

האם אפשר לזהות בזמן הריצה אם המיקום הגיאוגרפי נחסם בגלל חוסר בהקשר מאובטח

כן. במפרט של המיקום הגיאוגרפי מוגדר אובייקט PositionError שמועבר לקריאה חוזרת (callback) של כשל בממשקי ה-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, צריך להעביר את הדפים שמבצעים קריאות ל-Geolocation API ל-HTTPS כדי לוודא שנעשה בהם שימוש בהקשר מאובטח.

יש כמה אפשרויות חלופיות להצגת מיקום המשתמש, שלא מושפעות מהשינוי הזה, כמו Google Maps Geolocation API, GeoIP (למשל, יש פתרונות אחרים מבוססי-מיקום) ומיקוד שהמשתמש הזין. עם זאת, מומלץ מאוד לעבור להשתמש ב-HTTPS בדרך הטובה ביותר כדי להבטיח גישה מתמשכת למיקום גיאוגרפי.