Chính sách bảo mật nội dung

Nếu bạn chưa hiểu rõ về Chính sách bảo mật nội dung (CSP), bạn có thể bắt đầu bằng cách tham khảo Giới thiệu về Chính sách bảo mật nội dung. Tài liệu đó trình bày góc nhìn rộng hơn về CSP trên nền tảng web; CSP trong ứng dụng Chrome không linh hoạt.

CSP là chính sách giúp giảm thiểu các vấn đề về tập lệnh trên nhiều trang web và chúng ta đều biết rằng việc viết tập lệnh trên nhiều trang web là không tốt. Chúng tôi sẽ không thử thuyết phục bạn rằng CSP là một chính sách mới, khá nóng bỏng. Quá trình này đòi hỏi nhiều công việc và bạn sẽ cần tìm hiểu cách thực hiện các nhiệm vụ cơ bản theo những cách khác nhau.

Mục đích của tài liệu này là cho bạn biết chính xác nội dung của chính sách CSP đối với Ứng dụng Chrome, những việc bạn cần làm để tuân thủ chính sách đó cũng như cách bạn vẫn có thể thực hiện các tác vụ cơ bản đó theo cách tuân thủ CSP.

CSP cho ứng dụng Chrome là gì?

Chính sách bảo mật nội dung của Ứng dụng Chrome hạn chế bạn làm những việc sau:

  • Bạn không thể sử dụng tập lệnh nội tuyến trong các trang Ứng dụng Chrome của mình. Quy định hạn chế này cấm cả thao tác chặn <script> và trình xử lý sự kiện (<button onclick="...">).
  • Bạn không được tham chiếu tài nguyên bên ngoài trong bất kỳ tệp ứng dụng nào (ngoại trừ tài nguyên video và âm thanh). Bạn không thể nhúng các tài nguyên bên ngoài vào iframe.
  • Bạn không thể dùng các phương thức chuyển chuỗi thành JavaScript như eval()new Function().

Việc này được triển khai thông qua giá trị chính sách sau:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

Ứng dụng Chrome chỉ có thể tham chiếu đến các tập lệnh và đối tượng trong ứng dụng của bạn, ngoại trừ tệp nội dung nghe nhìn (ứng dụng có thể tham chiếu đến video và âm thanh bên ngoài gói). Các tiện ích của Chrome sẽ cho phép bạn nới lỏng Chính sách bảo mật nội dung mặc định còn Ứng dụng Chrome thì không.

Cách tuân thủ CSP

Tất cả JavaScript và tất cả tài nguyên phải được cục bộ hóa (mọi thứ được đóng gói trong Ứng dụng Chrome).

"Nhưng làm cách nào để..."

Có khả năng bạn đang sử dụng thư viện mẫu và nhiều thư viện trong số này sẽ không hoạt động với CSP. Bạn cũng nên truy cập vào các tài nguyên bên ngoài trong ứng dụng của mình (hình ảnh bên ngoài, nội dung từ trang web).

Dùng thư viện mẫu

Sử dụng một thư viện cung cấp các mẫu được biên dịch trước và bạn đã hoàn tất. Bạn vẫn có thể sử dụng một thư viện không cung cấp tính năng biên dịch trước, nhưng bạn sẽ phải thực hiện một số thao tác và áp dụng một số hạn chế.

Bạn sẽ cần sử dụng hộp cát để tách biệt mọi nội dung mà bạn muốn thực hiện 'eval'. Hộp cát sẽ nâng CSP trên nội dung mà bạn chỉ định. Nếu bạn muốn sử dụng các API Chrome rất mạnh mẽ trong Ứng dụng Chrome, thì nội dung trong hộp cát của bạn không thể tương tác trực tiếp với các API này (xem phần Nội dung cục bộ trong hộp cát).

Truy cập vào tài nguyên từ xa

Bạn có thể tìm nạp tài nguyên từ xa qua XMLHttpRequest và phân phát các tài nguyên đó qua URL blob:, data: hoặc filesystem: (xem phần Tham chiếu tài nguyên bên ngoài).

Bạn có thể tải video và âm thanh qua các dịch vụ từ xa vì các dịch vụ này có hành vi dự phòng tốt khi không có mạng hoặc khi kết nối không ổn định.

Nhúng nội dung web

Thay vì sử dụng iframe, bạn có thể gọi đến một URL bên ngoài bằng thẻ WebView (xem phần Nhúng trang web bên ngoài).