Ngừng sử dụng và xoá API trong Chrome 56

Joe Medley
Joe Medley

Trong hầu hết các phiên bản Chrome, chúng ta đều thấy một số lượng đáng kể các bản cập nhật và cải tiến đối với sản phẩm, hiệu suất của sản phẩm cũng như các tính năng của Nền tảng web. Bài viết này mô tả các tính năng ngừng hoạt động và bị xoá trong Chrome 56, đang ở giai đoạn thử nghiệm beta kể từ ngày 8 tháng 12. Danh sách này có thể thay đổi bất cứ lúc nào.

Xoá tính năng hỗ trợ cho chứng chỉ SHA-1

Thuật toán băm mã hoá SHA-1 đã cho thấy dấu hiệu yếu kém lần đầu tiên cách đây hơn 11 năm và nghiên cứu gần đây cho thấy khả năng sắp xảy ra các cuộc tấn công có thể trực tiếp ảnh hưởng đến tính toàn vẹn của cơ sở hạ tầng khoá công khai (PKI) trên web.

Để bảo vệ người dùng khỏi các cuộc tấn công như vậy, Chrome không còn hỗ trợ chứng chỉ SHA-1 kể từ Chrome 56 (bản phát hành ổn định vào tháng 1 năm 2017). Khi truy cập vào một trang web sử dụng chứng chỉ như vậy, bạn sẽ thấy một cảnh báo xen kẽ. Chúng tôi cung cấp thêm thông tin chi tiết trên Blog bảo mật của Chrome.

Ý định xóa | Trình theo dõi Chromestatus | Lỗi Chromium

Xoá mật mã ECDSA ở chế độ CBC trong TLS

Cấu trúc chế độ CBC của TLS có lỗi, khiến nó dễ bị tổn thương và rất khó triển khai một cách an toàn. Mặc dù các thuật toán mật mã ở chế độ CBC vẫn được sử dụng rộng rãi với RSA, nhưng hầu như không có thuật toán mật mã nào ở chế độ CBC với ECDSA. Các trình duyệt khác vẫn hỗ trợ các thuật toán mã hoá này, nên chúng tôi cho rằng rủi ro là thấp. Ngoài ra, ECDSA trong TLS được ít tổ chức sử dụng và thường có chế độ thiết lập phức tạp hơn (một số ứng dụng cũ chỉ hỗ trợ RSA). Vì vậy, chúng tôi kỳ vọng các trang web ECDSA sẽ được duy trì tốt hơn và phản hồi nhanh hơn trong trường hợp xảy ra sự cố.

TLS 1.2 đã thêm thuật toán mật mã mới dựa trên AEAD, giúp tránh các vấn đề này, cụ thể là AES_128_GCM, AES_256_GCM hoặc CHACHA20_POLY1305. Mặc dù hiện tại chúng tôi chỉ yêu cầu việc này đối với các trang web dựa trên ECDSA, nhưng tất cả quản trị viên đều nên thực hiện việc này. Thuật toán mật mã dựa trên AEAD không chỉ cải thiện tính bảo mật mà còn cải thiện hiệu suất. AES-GCM có hỗ trợ phần cứng trên các CPU gần đây và ChaCha20-Poly1305 cho phép triển khai phần mềm nhanh. Trong khi đó, các thuật toán mật mã CBC yêu cầu các biện pháp giảm thiểu phức tạp và chậm cũng như quyền truy cập PRNG trên mỗi bản ghi gửi đi. Các thuật toán mật mã dựa trên AEAD cũng là điều kiện tiên quyết để tối ưu hoá HTTP/2 và Khởi động giả.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá cử chỉ của người dùng khỏi thao tác cuộn bằng thao tác chạm

Chúng tôi đã thấy nhiều ví dụ về các quảng cáo được viết kém chất lượng hoặc độc hại kích hoạt thao tác điều hướng đối với thao tác cuộn bằng cách chạm trên touchstart hoặc tất cả các sự kiện touchend. Nếu sự kiện "bánh xe" không thể mở cửa sổ bật lên, thì thao tác cuộn bằng cảm ứng cũng không được. Điều này có thể làm hỏng một số trường hợp, chẳng hạn như nội dung nghe nhìn không phát khi chạm hoặc cửa sổ bật lên không mở khi chạm. Safari đã âm thầm không mở được cửa sổ bật lên trong tất cả các trường hợp này.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Không cho phép tất cả các lệnh tìm nạp cho tập lệnh có thuộc tính loại/ngôn ngữ không hợp lệ

Hiện tại, trình quét tải trước của Chrome tìm nạp các mục trong phần tử <scripts> bất kể giá trị của thuộc tính type hoặc language, mặc dù tập lệnh sẽ không được thực thi khi được phân tích cú pháp. Bằng cách ngừng sử dụng tính năng tìm nạp, trình quét tải trước và trình phân tích cú pháp sẽ có cùng ngữ nghĩa và chúng ta sẽ không bắt đầu tìm nạp các tập lệnh mà chúng ta không sử dụng. Mục đích của việc này là để lưu dữ liệu cho những người dùng truy cập vào các trang web có nhiều thẻ tập lệnh tuỳ chỉnh được xử lý sau (chẳng hạn như type="text/template").

Trường hợp sử dụng tập lệnh không hợp lệ để ping máy chủ được API sendBeacon xử lý đầy đủ.

Thay đổi này giúp Chrome phù hợp với Safari, mặc dù Firefox vẫn yêu cầu tập lệnh bất kể loại hoặc ngôn ngữ.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá MediaStreamTrack.getSources()

Phương thức này không còn thuộc quy cách và không được trình duyệt lớn nào khác hỗ trợ. Phương thức này đã được thay thế bằng MediaDevices.enumerateDevices() mà Blink đã hỗ trợ mà không cần cờ kể từ phiên bản 47 và cũng được các trình duyệt khác hỗ trợ. Dưới đây là ví dụ minh hoạ. Trước tiên, hàm getCameras() giả định này sử dụng tính năng phát hiện tính năng để tìm và sử dụng enumerateDevices(). Nếu không phát hiện được tính năng, hệ thống sẽ tìm getSources() trong MediaStreamTrack. Cuối cùng, nếu không có API hỗ trợ loại nào, hãy trả về mảng cameras trống.

    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);
      }
    };

Ý định xóa | Trình theo dõi Chromestatus | Lỗi Chromium

Xoá lệnh CSP reflected-xss

Các bản nháp ban đầu của quy cách Chính sách bảo mật nội dung cấp 2 chứa một lệnh reflected-xss không cung cấp gì ngoài tiêu đề X-XSS-Protection, ngoại trừ cú pháp khác. Chỉ thị này đã bị xoá khỏi thông số kỹ thuật vào năm 2015, nhưng không phải trước khi được triển khai trong Chrome. Từ giờ, chúng tôi sẽ ngừng hỗ trợ lệnh này.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Thay thế lệnh "referrer" của CSP

Chỉ thị referrer của CSP cho phép chủ sở hữu trang web đặt chính sách về đường liên kết giới thiệu từ tiêu đề HTTP. Tính năng này không chỉ có mức sử dụng rất thấp mà còn không còn nằm trong bất kỳ thông số kỹ thuật nào của W3C.

Những trang web vẫn cần chức năng này nên sử dụng <meta name="referrer"> hoặc tiêu đề Referrer-Policy mới.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá trường PaymentAddress.careOf

Giao diện PaymentAddress có trường careOf không theo chuẩn (không có tiêu chuẩn địa chỉ nào phổ biến hỗ trợ trường này). Trường careOf cũng không cần thiết. Các trường người nhận và tổ chức đã hỗ trợ đầy đủ mọi trường hợp sử dụng cần thiết. Việc thêm careOf gây ra các vấn đề đáng kể về khả năng tương tác với các giản đồ và API địa chỉ bưu chính hiện có. Để thảo luận đầy đủ hơn, hãy đọc đề xuất xoá thông số kỹ thuật trên GitHub.

Ý định xoá | Lỗi Chromium

Xoá SVGViewElement.viewTarget

Thuộc tính SVGViewElement.viewTarget không thuộc thông số kỹ thuật SVG2.0 và mức sử dụng của thuộc tính này là rất nhỏ hoặc không tồn tại. Thuộc tính này không được dùng nữa trong Chrome 54 và hiện đã bị xoá.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium