Nếu bạn chưa hiểu rõ về Chính sách bảo mật nội dung (CSP), Giới thiệu về bảo mật nội dung Chính sách là một điểm khởi đầu phù hợp. Tài liệu đó đề cập đến góc nhìn tổng quan về nền tảng web của CSP; CSP trên ứng dụng Chrome không linh hoạt.
CSP là một chính sách giúp giảm thiểu các vấn đề viết tập lệnh trên nhiều trang web, mà chúng ta đều biết rằng việc triển khai tập lệnh thì chưa tốt. Chúng tôi sẽ không cố gắng thuyết phục bạn rằng CSP là một chính sách mới rõ ràng và dễ hiểu. Có nhiều việc cần làm; bạn sẽ cần tìm hiểu cách thực hiện các tác vụ cơ bản theo cách khác nhau.
Mục đích của tài liệu này là nhằm cho bạn biết chính xác chính sách CSP dành cho Ứng dụng Chrome, những việc bạn cần làm để tuân thủ và làm thế nào bạn vẫn có thể thực hiện những 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 đối với Ứ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 cùng dòng trong trang Ứng dụng Chrome của mình. Quy định hạn chế này cấm cả hai quy tắc chặn
<script>
và trình xử lý sự kiện (<button onclick="...">
). - Bạn không thể tham chiếu bất kỳ tài nguyên bên ngoài nào trong bất kỳ tệp ứng dụng nào của mình (ngoại trừ video và âm thanh nguồn cấp dữ liệu). 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ể sử dụng các phương thức chuỗi đến JavaScript như
eval()
và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, ngoại trừ nội dung nghe nhìn tệp (ứ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ẽ giúp bạn thư giãn Chính sách bảo mật nội dung mặc định; Ứng dụng Chrome thì không.
Cách tuân thủ CSP
Tất cả JavaScript và mọi tài nguyên phải là cục bộ (mọi thứ được đóng gói trong Ứng dụng Chrome của bạn).
"Nhưng làm cách nào để tôi..."
Rất có thể bạn đang dùng các thư viện tạo 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 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 tạo mẫu
Hãy 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ể dùng thư viện không cung cấp tính năng biên dịch trước nhưng sẽ đòi hỏi bạn phải làm một số việc và có 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 bạn muốn thực hiện "eval" những việc cần làm. Chế độ hộp cát giúp nâng cao CSP trên nội dung mà bạn chỉ định. Nếu bạn muốn sử dụng Chrome rất mạnh mẽ API trong Ứng dụng Chrome, nội dung dạng 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 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 các tài nguyên từ xa qua XMLHttpRequest
và phân phát các tài nguyên đó qua blob:
, data:
hoặc
URL filesystem:
(xem Tham chiếu các tài nguyên bên ngoài).
Video và âm thanh có thể được tải từ 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 khi không có mạng hoặc kết nối không ổn định.
Nhúng nội dung trên web
Thay vì sử dụng iframe, bạn có thể gọi URL bên ngoài bằng thẻ chế độ xem web (xem phần Nhúng trang web bên ngoài).