Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Gói Spatie/Laravel-CSP xử lý các tập lệnh và kiểu dáng của Spatie/Laravel


Gói Spatie/Laravel-CSP xử lý các tập lệnh và kiểu dáng của Spatie/Laravel


Gói Spatie/Laravel-CSP xử lý các tính năng động cho các tập lệnh và kiểu nội tuyến bằng cách tạo ra một giá trị không duy nhất trên mỗi yêu cầu HTTP và tự động đưa nó vào tiêu đề chính sách bảo mật nội dung (CSP) và các phần tử HTML có liên quan. Dưới đây là một lời giải thích chi tiết về cách nó hoạt động:

Thế hệ không

- Gói sử dụng giao diện NonceGenerator để tạo chuỗi không động cho mỗi yêu cầu.
- Theo mặc định, bạn có thể triển khai lớp Trình tạo Nonce của riêng bạn trả về một chuỗi ngẫu nhiên duy nhất. Ví dụ: bạn có thể tích hợp với hệ thống không tính của Laravel VITE bằng cách tạo một lớp như 'Laravelvitenoncegenerator` sử dụng `vite :: cspnonce ()` để có được sự không tạo do VITE trong quá trình biên dịch tài sản.
- Bạn chỉ định lớp Trình tạo Nonce của mình trong khóa `Nonce_Generator` của tệp cấu hình` csp.php` của gói.

Áp dụng không phải là chính sách

-Trong lớp Chính sách CSP của bạn (thường mở rộng `Spatie \ CSP \ Chính sách \ Basic`), bạn sử dụng các phương thức như` addNonceForDirective (Chỉ thị :: script) `và` addNonCefordirective (Chỉ thị ::
- Điều này đảm bảo các bản không được tạo được bao gồm trong tiêu đề CSP cho các chỉ thị này, cho phép các tập lệnh nội tuyến và các kiểu mang thuộc tính không phù hợp để thực thi.

Middleware và tiêu đề tiêm

- Gói cung cấp phần mềm trung gian (`Spatie \ CSP \ AddCSpheaders`) mà bạn đăng ký trong kernel HTTP hoặc trên các tuyến cụ thể.
- Phần mềm trung gian này tạo ra sự không thuộc yêu cầu, áp dụng chính sách CSP bao gồm các chỉ thị không phải và thêm các tiêu đề CSP phù hợp vào phản hồi HTTP.
- Giá trị không nhất quán trong yêu cầu, vì vậy bạn có thể sử dụng các chỉ thị của Blade như `@nonce` hoặc các hàm trợ giúp như` csp_nonce () `Trong các chế độ xem của bạn để xuất thuộc tính không phải là thẻ nội tuyến` `hoặc` `.

Tích hợp với Laravel Vite

- Khi sử dụng Laravel Vite, gói có thể tận dụng thế hệ không tích hợp của Vite thông qua `vite :: cspnonce ()`.
- Bạn có thể tạo một lớp Trình tạo Nonce tùy chỉnh trả về Nonce từ VITE, đảm bảo rằng các bản không được sử dụng trong tiêu đề CSP phù hợp với các bản không được áp dụng cho các tập lệnh và kiểu được tiêm VITE.
- Điều này tránh các vi phạm CSP gây ra bởi sự không phù hợp không phải là và cho phép các tập lệnh/kiểu nội tuyến an toàn trong các ứng dụng Laravel do VITE cung cấp.

Các tính năng bổ sung

- Gói cũng hỗ trợ các chính sách CSP kết xuất dưới dạng thẻ meta (thông qua Chỉ thị Blade `@Cspmetatag`) khi bạn không thể kiểm soát các tiêu đề HTTP.
- Nó hỗ trợ chế độ chỉ báo cáo để kiểm tra các chính sách CSP mà không chặn tài nguyên.
- Bạn có thể tùy chỉnh các chính sách cho các môi trường khác nhau (phát triển so với sản xuất).

Ghi chú thực tế

- Bạn phải đảm bảo rằng Nonce là đầu ra trên các tập lệnh/kiểu nội tuyến bằng cách sử dụng Lệnh Blade `@Nonce` hoặc` csp_nonce () `Người trợ giúp; Nếu không, trình duyệt sẽ chặn chúng.
- Các trình duyệt như Chrome có thể loại bỏ các thuộc tính không phải là từ các thẻ tập lệnh được tiêm linh hoạt, vì vậy hãy sử dụng hành vi không cẩn thận và kiểm tra.
- Nonce là một chuỗi ngẫu nhiên được tạo cho mỗi yêu cầu, làm cho các tập lệnh/kiểu nội tuyến an toàn hơn bằng cách chỉ cho phép những người không thực thi chính xác.

Tóm lại, Spatie/Laravel-CSP tự động tạo ra một yêu cầu không theo yêu cầu thông qua trình tạo không có cấu hình, bao gồm điều này trong các tiêu đề CSP cho các tập lệnh và kiểu, và cung cấp các chỉ thị và trợ giúp Blade để xuất Thuộc tính không phải là các phần tử nội tuyến. Sự tích hợp này, đặc biệt là với Laravel Vite, đảm bảo các tập lệnh và kiểu nội tuyến được CSP cho phép một cách an toàn mà không cần sử dụng đường thẳng không an toàn, tăng cường bảo mật ứng dụng trong khi duy trì chức năng [1] [2] [3] [4] [6].

Trích dẫn:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-mix-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-empty-when-using-spatie-laravel-csp-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-in-inline-style-and-script-injected-by-vue-in-a-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-secural
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-official-packages
[9] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src