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

Liên khúc Joe
Joe Medley

Trong hầu hết mọi phiên bản Chrome, chúng tôi nhận thấy nhiều nội dung cập nhật và cải tiến đáng kể đối với sản phẩm, hiệu suất cũng như các khả năng của Nền tảng web. Bài viết này mô tả việc ngừng sử dụng và xoá khỏi Chrome 56 (đang trong 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.

Ngừng hỗ trợ chứng chỉ SHA-1

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

Để bảo vệ người dùng khỏi các cuộc tấn công như vậy, kể từ Chrome 56, Chrome không còn hỗ trợ chứng chỉ SHA-1 kể từ Chrome 56 có bản phát hành ổn định vào tháng 1 năm 2017. Việc truy cập một trang web bằng chứng chỉ như vậy sẽ dẫn đến 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 xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá thuật toán mật mã ECDSA chế độ CBC trong TLS

Cấu trúc chế độ CBC của TLS (Bảo mật tầng truyền tải) có nhiều lỗ hổng, khiến việc triển khai một cách an toàn và rất khó khăn. Mặc dù thuật toán mật mã chế độ CBC vẫn được sử dụng rộng rãi trong RSA, nhưng thuật toán này hầu như không tồn tại khi dùng ECDSA. Các trình duyệt khác vẫn hỗ trợ thuật toán mật mã này, nhưng chúng tôi cho rằng rủi ro ở mức thấp. Ngoài ra, ECDSA trong TLS được một vài tổ chức sử dụng và thường có quy trình 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 hy vọng các trang web ECDSA sẽ được duy trì hiệu quả hơn và phản hồi nhanh hơn trong trường hợp có vấn đề.

TLS 1.2 đã thêm các 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 điều này cho các trang web dựa trên ECDSA, nhưng tất cả quản trị viên nên sử dụng. Thuật toán mật mã dựa trên AEAD không chỉ cải thiện độ bảo mật mà còn cả 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 chóng. Trong khi đó, thuật toán mật mã CBC yêu cầu giảm thiểu phức tạp chậm và quyền truy cập PRNG trên mỗi bản ghi gửi đi. 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ề quảng cáo được viết kém hoặc độc hại kích hoạt thao tác di chuyển bằng thao tác 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 mở được cửa sổ bật lên, thì thao tác cuộn cũng không được phép chạm. Việc này có thể phá vỡ 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ử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ần tìm nạp đối với 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 sẽ 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 là gì, mặc dù tập lệnh sẽ không được thực thi khi được phân tích cú pháp. Khi 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 tôi sẽ không bắt đầu tìm nạp cho các tập lệnh mà chúng tôi sẽ không sử dụng. Mục đích của tính năng này là lưu dữ liệu cho những người dùng di chuyển đến các trang web có nhiều thẻ tập lệnh tuỳ chỉnh đã được xử lý sau (ví dụ: type="text/template").

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

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

Ý đị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 là một phần của thông số kỹ thuật và không được bất kỳ trình duyệt chính nào khác hỗ trợ. Chúng tôi đã thay thế API này bằng MediaDevices.enumerateDevices(), một giải pháp mà Blink hỗ trợ mà không cần cờ kể từ phiên bản 47, đồng thời cũng được các trình duyệt khác hỗ trợ. Ví dụ như dưới đây. Hàm getCameras() giả định này trước tiên sử dụng chức 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, tính năng này sẽ tìm getSources() trong MediaStreamTrack. Cuối cùng, nếu không có sự hỗ trợ API 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 xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá lệnh CSP đã phản ánh

Bản nháp ban đầu của thông số kỹ thuật Chính sách bảo mật nội dung cấp 2 chứa lệnh reflected-xss không cung cấp gì khác ngoài tiêu đề X-XSS-Protection ngoài một cú pháp khác. Lệnh này đã bị xoá khỏi quy cách vào năm 2015, nhưng chưa được triển khai trong Chrome. Chúng tôi hiện đã 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

Lệnh referrer của CSP cho phép chủ sở hữu trang web đặt một chính sách 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 thuộc bất kỳ thông số kỹ thuật W3C nào.

Các 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 chuẩn (không có tiêu chuẩn địa chỉ nổi tiếng nào hỗ trợ trường này). Trường careOf cũng không cần thiết, vì 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 sẽ gây ra những vấn đề lớn về khả năng tương tác với các API và giản đồ đị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 quy cách SVG2.0 và mức sử dụng thuộc tính này rất nhỏ hoặc không tồn tại. Thuộc tính này không còn được dùng trong Chrome 54 và hiện đã bị loại bỏ.

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