הוצאה משימוש והסרה של ממשקי API ב-Chrome 56

Joe Medley
Joe Medley

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

הסרת התמיכה באישורי SHA-1

הסימנים הראשונים של חולשה באלגוריתם הגיבוב הקריפטוגרפית SHA-1 הופיעו לפני יותר מעשרים שנה, ומחקרים מהזמן האחרון מצביעים על אפשרות קרובה של התקפות שעלולות להשפיע ישירות על תקינות התשתית של מפתחות הציבור באינטרנט (PKI).

כדי להגן על המשתמשים מפני התקפות כאלה, החל מגרסה 56 של Chrome, שפורסמה בינואר 2017, אין יותר תמיכה באישורי SHA-1. כניסה לאתר באמצעות אישור כזה תוביל להצגת אזהרה בדף ביניים. פרטים נוספים זמינים בבלוג האבטחה של Chrome.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

הסרת הצפנות ECDSA במצב CBC ב-TLS

הבנייה של TLS במצב CBC פגומה, ולכן היא פגיעה וקשה מאוד להטמיע אותה בצורה מאובטחת. אמנם עדיין נעשה שימוש נרחב בקריפטוגרפיה של CBC עם RSA, אבל היא כמעט לא קיימת עם ECDSA. דפדפנים אחרים עדיין תומכים בהצפנות האלה, ולכן אנחנו סבורים שהסיכון נמוך. בנוסף, רק מעט ארגונים משתמשים ב-ECDSA ב-TLS, ובדרך כלל עם הגדרה מורכבת יותר (חלק מהלקוחות הישנים תומכים רק ב-RSA). לכן, אנחנו צופים שהאתרים עם ECDSA יהיו בעלי תחזוקה טובה יותר ותגובה מהירה יותר במקרה של בעיות.

ב-TLS 1.2 נוספו צפנים חדשים שמבוססים על AEAD, שמאפשרים למנוע את הבעיות האלה, במיוחד AES_128_GCM, ‏ AES_256_GCM או CHACHA20_POLY1305. בשלב זה אנחנו דורשים זאת רק לאתרים שמבוססים על ECDSA, אבל מומלץ לעשות זאת לכל האדמינים. הצפנות שמבוססות על AEAD משפרות לא רק את האבטחה, אלא גם את הביצועים. ל-AES-GCM יש תמיכה בחומרה במעבדים מהדורות האחרונות, ול-ChaCha20-Poly1305 יש תמיכה בהטמעות תוכנה מהירות. לעומת זאת, הצפנות CBC דורשות אמצעים מורכבים ומושהים לצמצום נזקים וגישה ל-PRNG בכל רשומה יוצאת. הצפנות מבוססות-AEAD הן גם תנאי מוקדם לביצוע אופטימיזציות של HTTP/2 ושל False Start.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

הסרת תנועות משתמש מהגלילה בהקשה

ראינו כמה דוגמאות למודעות זדוניות או שגויות שנכתבו, שמפעילות ניווט בגלילה במגע באירוע touchstart או בכל האירועים מסוג touchend. אם אירוע 'גלגל' לא יכול לפתוח חלון קופץ, גם גלילה באמצעות מגע לא אמורה לפתוח אותו. הפעולה הזו עשויה לגרום לבעיות בתרחישים מסוימים, למשל, מדיה שלא פועלת במגע או חלונות קופצים שלא נפתחים במגע. כבר עכשיו, ב-Safari לא נפתחים חלונות קופצים בכל התרחישים האלה.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

איסור על כל האחזורים של סקריפטים עם מאפייני שפה/סוג לא חוקיים

נכון לעכשיו, סורק ההטענה מראש של Chrome מאחזר פריטים ברכיבי <scripts> ללא קשר לערך של המאפיין type או language, אבל הסקריפט לא יופעל במהלך הניתוח. כשנפסיק להשתמש באפשרות האחזור, לסורק האתחול ולמנתח תהיה אותה סמנטיקה, ולא נפעיל אחזור של סקריפטים שלא נשתמש בהם. המטרה של ההגדרה הזו היא לשמור נתונים של משתמשים שמנווטים לאתרים עם הרבה תגי סקריפט בהתאמה אישית שעברו עיבוד לאחר מכן (למשל, type="text/template").

התרחיש לדוגמה של שימוש בסקריפטים לא תקינים לשליחת פינג לשרתים מכוסה בצורה מספקת על ידי sendBeacon API.

השינוי הזה תואם את Chrome ל-Safari, אבל Firefox עדיין מבקש סקריפטים ללא קשר לסוג או לשפה.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

הסרה של MediaStreamTrack.getSources()

השיטה הזו כבר לא חלק מהמפרט, ואף דפדפן ראשי אחר לא תומך בה. הוא הוחלף ב-MediaDevices.enumerateDevices(), ש-Blink תומכת בו ללא דגלים מאז גרסה 47, וגם דפדפנים אחרים תומכים בו. דוגמה לכך מופיעה בהמשך. הפונקציה ההיפותטית getCameras() משתמשת קודם בזיהוי תכונות כדי למצוא את enumerateDevices() ולהשתמש בה. אם זיהוי התכונה נכשל, המערכת מחפשת את getSources() ב-MediaStreamTrack. לסיום, אם אין תמיכה ב-API מסוג כלשהו, מחזירים את המערך הריק cameras.

    function getCameras(camerasCallback) {
      var cameras = [];
      if('enumerateDevices' in navigator.mediaDevices) {
         navigator.mediaDevices.enumerateDevices()
          .then(function(sources) {
            return sources.filter(function(source) { 
              return source.kind == 'videoinput' 
            });
          })
          .then(function(sources) {
            sources.forEach(function(source) {
              if(source.label.indexOf('facing back') >= 0) {
                // move front facing to the front.
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            });
            camerasCallback(cameras);
          });
      }
      else if('getSources' in MediaStreamTrack) {
        MediaStreamTrack.getSources(function(sources) {

          for(var i = 0; i < sources.length; i++) {
            var source = sources[i];
            if(source.kind === 'video') {

              if(source.facing === 'environment') {
                // cameras facing the environment are pushed to the front of the page
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            }
          }
          camerasCallback(cameras);
        });
      }
      else {
        // We can't pick the correct camera because the API doesn't support it.
        camerasCallback(cameras);
      }
    };

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

הסרת ההוראה reflected-xss ב-CSP

טיוטות מוקדמות של המפרט של Content Security Policy Level 2 הכילו הוראה reflected-xss שלא הציעה יותר מהכותרת X-XSS-Protection, מלבד תחביר שונה. ההנחיה הזו הוסרה מהמפרט ב-2015, אבל לא לפני שהוטמעה ב-Chrome. אנחנו מסירים עכשיו את התמיכה בהוראה הזו.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

החלפת ההוראה 'גורם מפנה' ב-CSP

ההנחיה referrer של CSP אפשרה לבעלי אתרים להגדיר מדיניות של גורם מפנה מכותרת HTTP. לא רק שהשימוש בתכונה הזו נמוך מאוד, היא גם לא חלק יותר מכל מפרט של W3C.

באתרים שעדיין צריכים את הפונקציונליות הזו, צריך להשתמש ב-<meta name="referrer"> או בכותרת החדשה Referrer-Policy.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium

הסרת השדה PaymentAddress.careOf

לממשק PaymentAddress יש שדה careOf שהוא לא סטנדרטי (אין בו תמיכה בתקני כתובות ידועים). גם השדה careOf לא נדרש, כי השדות 'נמען' ו'ארגון' תומכים בכל תרחישי השימוש הנדרשים. הוספת careOf יוצרת בעיות משמעותיות מבחינת יכולת הפעולה ההדדית עם סכמות קיימות של כתובות דואר וממשקי API. לסקירה מפורטת יותר, אפשר לקרוא את הצעה להסרת המפרט ב-GitHub.

כוונה להסרה | באג ב-Chromium

הסרה של SVGViewElement.viewTarget

המאפיין SVGViewElement.viewTarget לא נכלל במפרט של SVG2.0, והשימוש בו מצומצם או לא קיים. המאפיין הזה הוצא משימוש ב-Chrome 54 ועכשיו הוא הוסרה.

כוונה להסרה | מעקב אחרי סטטוס Chrome | באג ב-Chromium