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

Joe Medley
Joe Medley

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

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

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

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

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

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

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

ב-TLS 1.2 נוספו צופנים חדשים על סמך AEADs, כדי למנוע את הבעיות האלה, במיוחד את 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

הסרה של הוראת CSP מוחזרת מסוג xss

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

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

החלפה של הוראת CSP 'referrer'

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

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

Intent להסרה | מעקב אחר Chromestatus | באג ב-Chromium

הסרת השדה PaymentAddress.careOf

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

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

הסרה של SVGViewElement.viewTarget

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

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