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

โจ เมดเลย์
โจ้ เมดเลย์

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

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

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

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

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง 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 ด้วย

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

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

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

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

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

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

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

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

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง 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);
      }
    };

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

นำคำสั่ง details-xss CSP ออก

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

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

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

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

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

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

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

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

เจตนาเพื่อนำออก | ข้อบกพร่อง Chromium

นำ SVGViewElement.viewTarget ออก

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

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium