การเลิกใช้งานและการนำ API ออกใน Chrome 56

Joe Medley
Joe Medley

ใน Chrome เกือบทุกเวอร์ชัน เราเห็นการอัปเดตและการปรับปรุงผลิตภัณฑ์ ประสิทธิภาพ และความสามารถของแพลตฟอร์มเว็บเป็นจำนวนมาก บทความนี้จะอธิบายการเลิกใช้งานและการนำออกใน Chrome 56 ซึ่งอยู่ในรุ่นเบต้าตั้งแต่วันที่ 8 ธันวาคม รายการนี้อาจมีการเปลี่ยนแปลงได้ทุกเมื่อ

นำการรองรับใบรับรอง SHA-1 ออก

อัลกอริทึมแฮชการเข้ารหัส SHA-1เริ่มแสดงสัญญาณของความอ่อนแอเมื่อกว่า 11 ปีที่แล้ว และการวิจัยล่าสุดชี้ให้เห็นถึงโอกาสที่จะเกิดขึ้นในเร็วๆ นี้ของการโจมตีที่อาจส่งผลต่อความสมบูรณ์ของโครงสร้างพื้นฐานของคีย์สาธารณะ (PKI) ของเว็บโดยตรง

Chrome ไม่รองรับใบรับรอง SHA-1 อีกต่อไปเพื่อปกป้องผู้ใช้จากการโจมตีดังกล่าว โดยเริ่มตั้งแต่ Chrome 56 ซึ่งเป็นรุ่นที่ใช้งานเสถียรในเดือนมกราคม 2017 การเข้าชมเว็บไซต์ที่ใช้ใบรับรองดังกล่าวจะส่งผลให้มีคำเตือนคั่นระหว่างหน้า ดูรายละเอียดเพิ่มเติมได้ที่บล็อกความปลอดภัยของ Chrome

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

นำการเข้ารหัส ECDSA โหมด CBC ออกใน TLS

โครงสร้างโหมด CBC ของ TLS มีข้อบกพร่อง ทำให้มีความเปราะบางและติดตั้งใช้งานอย่างปลอดภัยได้ยากมาก แม้ว่าการเข้ารหัสโหมด CBC จะยังคงมีการใช้งานอย่างแพร่หลายกับ RSA แต่แทบจะไม่มีการใช้งานกับ ECDSA เบราว์เซอร์อื่นๆ ยังรองรับการเข้ารหัสเหล่านี้อยู่ เราจึงเชื่อว่าความเสี่ยงมีน้อย นอกจากนี้ ECDSA ใน TLS ยังใช้โดยองค์กรเพียงไม่กี่แห่งและมักจะมีการตั้งค่าที่ซับซ้อนกว่า (ไคลเอ็นต์รุ่นเก่าบางรุ่นรองรับเฉพาะ RSA) เราจึงคาดว่าเว็บไซต์ ECDSA จะได้รับการบำรุงรักษาและตอบสนองได้ดีขึ้นในกรณีที่เกิดปัญหา

TLS 1.2 เพิ่มการเข้ารหัสใหม่ตาม AEAD ซึ่งหลีกเลี่ยงปัญหาเหล่านี้ โดยเฉพาะ AES_128_GCM, AES_256_GCM หรือ CHACHA20_POLY1305 แม้ว่าตอนนี้เราจะกำหนดให้ใช้เฉพาะกับเว็บไซต์ที่ใช้ ECDSA เท่านั้น แต่เราขอแนะนำให้ผู้ดูแลระบบทุกคนใช้ การเข้ารหัสที่อิงตาม AEAD ไม่เพียงช่วยปรับปรุงความปลอดภัย แต่ยังช่วยปรับปรุงประสิทธิภาพด้วย AES-GCM มีการสนับสนุนฮาร์ดแวร์ใน CPU รุ่นใหม่ๆ และ ChaCha20-Poly1305 รองรับการใช้งานซอฟต์แวร์ที่รวดเร็ว ขณะเดียวกัน การเข้ารหัส CBC ต้องใช้การลดความเสี่ยงที่ซับซ้อนและช้า รวมถึงการเข้าถึง PRNG ในระเบียนขาออกแต่ละรายการ การเข้ารหัสที่อิงตาม AEAD ยังเป็นข้อกําหนดเบื้องต้นสําหรับการเพิ่มประสิทธิภาพ HTTP/2 และ False Start ด้วย

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

นำท่าทางสัมผัสของผู้ใช้ออกจากการเลื่อนด้วยการแตะ

เราได้เห็นตัวอย่างโฆษณาที่เขียนมาไม่ดีหรือเป็นอันตรายหลายรายการซึ่งทริกเกอร์การนําทางสำหรับการเลื่อนด้วยการสัมผัสในเหตุการณ์ touchstart หรือ touchend ทั้งหมด หากเหตุการณ์ "ล้อ" เปิดป๊อปอัปไม่ได้ การเลื่อนด้วยนิ้วก็ไม่ควรเปิดป๊อปอัปเช่นกัน ซึ่งอาจทำให้บางสถานการณ์ใช้งานไม่ได้ เช่น สื่อไม่เล่นเมื่อแตะ หรือป๊อปอัปไม่เปิดเมื่อแตะ Safari ไม่สามารถเปิดป๊อปอัปในสถานการณ์เหล่านี้ทั้งหมดอยู่แล้ว

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

ไม่อนุญาตให้ดึงข้อมูลสคริปต์ทั้งหมดที่มีแอตทริบิวต์ประเภท/ภาษาไม่ถูกต้อง

ปัจจุบันเครื่องมือสแกนการโหลดล่วงหน้าของ Chrome จะดึงข้อมูลรายการในองค์ประกอบ <scripts> โดยไม่คำนึงถึงค่าของแอตทริบิวต์ type หรือ language แต่สคริปต์จะไม่ทำงานเมื่อแยกวิเคราะห์ การเลิกใช้งานการดึงข้อมูลจะทำให้เครื่องมือสแกนการโหลดล่วงหน้าและโปรแกรมแยกวิเคราะห์มีความหมายเหมือนกัน และเราจะไม่เริ่มการดึงข้อมูลสําหรับสคริปต์ที่จะไม่ใช้ การดำเนินการนี้มีไว้เพื่อบันทึกข้อมูลสําหรับผู้ใช้ที่ไปยังเว็บไซต์ซึ่งมีแท็กสคริปต์ที่กําหนดเองจํานวนมากซึ่งประมวลผลหลัง (เช่น type="text/template")

sendBeacon API ครอบคลุม Use Case ของการใช้สคริปต์ที่ไม่ถูกต้องเพื่อ ping เซิร์ฟเวอร์อย่างเพียงพอ

การเปลี่ยนแปลงนี้ทำให้ Chrome สอดคล้องกับ Safari แม้ว่า Firefox จะยังคงขอสคริปต์อยู่ก็ตาม ไม่ว่าจะประเภทหรือภาษาใดก็ตาม

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

นำ MediaStreamTrack.getSources() ออก

วิธีการนี้ไม่ได้อยู่ในข้อมูลจำเพาะอีกต่อไปและเบราว์เซอร์หลักอื่นๆ ไม่รองรับ เราได้แทนที่ด้วย MediaDevices.enumerateDevices() ซึ่ง Blink รองรับโดยไม่ต้องใช้ Flag ตั้งแต่เวอร์ชัน 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);
      }
    };

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

นําคําสั่ง CSP ของ reflected-xss ออก

ฉบับร่างแรกๆ ของข้อกําหนดนโยบายความปลอดภัยของเนื้อหาระดับ 2 มีคําสั่ง reflected-xss ซึ่งไม่ได้ให้อะไรมากกว่าส่วนหัว X-XSS-Protection นอกเหนือจากไวยากรณ์ที่ต่างกัน คำสั่งนี้ถูกนําออกจากข้อกําหนดในปี 2015 แต่ก่อนหน้านั้นได้มีการนําไปใช้ใน Chrome เรากําลังนําการรองรับคําสั่งนี้ออก

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

แทนที่คำสั่ง "referrer" ของ CSP

คำสั่ง CSP referrer อนุญาตให้เจ้าของเว็บไซต์กำหนดนโยบาย URL ที่มาจากส่วนหัว HTTP ฟีเจอร์นี้ไม่เพียงมีการใช้งานน้อยมาก แต่ยังไม่ได้อยู่ในข้อกำหนดของ W3C อีกต่อไป

เว็บไซต์ที่ยังคงต้องใช้ฟังก์ชันนี้ควรใช้ <meta name="referrer"> หรือส่วนหัว Referrer-Policy ใหม่

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium

นำช่อง PaymentAddress.careOf ออก

อินเทอร์เฟซ PaymentAddress มีช่อง careOf ที่ไม่เป็นไปตามมาตรฐาน (ไม่มีมาตรฐานที่อยู่ที่เป็นที่ยอมรับซึ่งรองรับ) นอกจากนี้ ช่อง careOf ก็ไม่จําเป็น เนื่องจากช่องผู้รับและองค์กรรองรับกรณีการใช้งานที่จําเป็นทั้งหมดได้อย่างเพียงพอ การเพิ่ม careOf ก่อให้เกิดปัญหาสำคัญในด้านการทำงานร่วมกันกับสคีมาและ API ที่อยู่ไปรษณีย์ที่มีอยู่ อ่านข้อเสนอในการนําข้อกําหนดออกใน GitHub เพื่อดูการพูดคุยอย่างละเอียด

Intent to Remove | ข้อบกพร่องของ Chromium

นำ SVGViewElement.viewTarget ออก

แอตทริบิวต์ SVGViewElement.viewTarget ไม่ได้อยู่ในข้อกำหนด SVG2.0 และการใช้งานมีน้อยหรือไม่มีเลย เราเลิกใช้งานแอตทริบิวต์นี้ใน Chrome 54 และนําออกไปแล้ว

Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium