Bảo mật và vận hành — NextPDF trên CodeIgniter 4
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Trang này mô tả các mối đe dọa mà tích hợp này cần chống lại, các biện pháp kiểm soát đã được xác minh trong mã nguồn của gói, cùng những quy tắc vận hành bạn nên tuân thủ để triển khai an toàn.
Mô hình mối đe dọa
Phần tiêu đề “Mô hình mối đe dọa”Bạn cần tính đến ba bề mặt có thể chịu tác động từ kẻ tấn công.
- Tải trọng của tác vụ trong hàng đợi. Hàng đợi lưu trữ dữ liệu tác vụ. Kẻ tấn công có quyền truy cập broker có thể sửa đổi dữ liệu đó. Hãy xem đó là đầu vào đã giải tuần tự hóa và không đáng tin cậy.
- Tên tệp phản hồi. Người dùng có thể cung cấp tên tệp tải xuống. Tên độc hại có thể chèn nội dung vào header.
- Đường dẫn cấu hình. Đường dẫn phông chữ và đường dẫn ký đến từ cấu hình. Đường dẫn độc hại có thể đọc từ hoặc ghi vào sai vị trí.
Biện pháp kiểm soát 1 — Danh sách cho phép đối với tải trọng hàng đợi
Phần tiêu đề “Biện pháp kiểm soát 1 — Danh sách cho phép đối với tải trọng hàng đợi”Tác vụ hàng đợi coi tải trọng của nó là dữ liệu đã giải tuần tự hóa và không đáng tin cậy. Tiêu chuẩn xác minh bảo mật ứng dụng (ASVS) của Open Worldwide Application Security Project (OWASP) yêu cầu xử lý đầu vào an toàn đối với dữ liệu đã giải tuần tự hóa từ nguồn không đáng tin cậy (ASVS V1.5.2).
Các biện pháp kiểm soát đã được xác minh trong GeneratePdfJob:
- Builder phải là một chuỗi không rỗng. Tác vụ từ chối mọi kiểu dữ liệu khác.
- Builder phải khớp với mẫu
App\PdfBuilders\<Class>::<method>. Tác vụ từ chối mọi namespace khác, hàm thông thường, cũng như tải trọng có tiền tố hoặc hậu tố. - Builder phải có thể gọi được. Tác vụ từ chối chuỗi khớp mẫu nhưng không phân giải được.
Kết hợp lại, các quy tắc này chặn việc thực thi mã tùy ý thông qua tải trọng hàng đợi bị giả mạo. Các bài kiểm thử của gói xác nhận từng trường hợp bị từ chối.
Biện pháp kiểm soát 2 — Giới hạn đường dẫn đầu ra của hàng đợi
Phần tiêu đề “Biện pháp kiểm soát 2 — Giới hạn đường dẫn đầu ra của hàng đợi”Tác vụ ghi một tệp vào đĩa. OWASP ASVS yêu cầu xử lý đường dẫn an toàn khi ứng dụng tạo đường dẫn tệp cho các thao tác với tệp (ASVS V5.3.2).
Các biện pháp kiểm soát đã được xác minh trong GeneratePdfJob:
- Đường dẫn đầu ra phải là chuỗi không rỗng.
- Tác vụ chuẩn hóa đường dẫn trước khi thực hiện bất kỳ bước kiểm tra nào. Nó phân giải các đoạn
.và..rồi chuyển đổi các ký tự phân tách. - Đường dẫn đã chuẩn hóa phải nằm bên trong
WRITEPATH/pdfs/. Tác vụ từ chối một thư mục cùng cấp có chung tiền tố tên (pdfs-evil/). - Đường dẫn phải kết thúc bằng
.pdf(không phân biệt chữ hoa chữ thường).
Các quy tắc này chặn việc ghi tệp tùy ý thông qua tải trọng đã bị giả mạo.
Biện pháp kiểm soát 3 — Tăng cường bảo mật header phản hồi
Phần tiêu đề “Biện pháp kiểm soát 3 — Tăng cường bảo mật header phản hồi”PdfResponse đính kèm một tập header cố định và đã được tăng cường bảo mật vào mọi phản hồi Portable Document Format (PDF):
| Header | Giá trị |
|---|---|
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
Cache-Control | private, max-age=0, must-revalidate |
Gói làm sạch tên tệp trước khi tên đó đi vào header. Nó loại bỏ các ký tự phân tách đường dẫn, byte null và carriage return/line feed (CR/LF). Nó escape dấu nháy kép cho dạng đặt trong dấu nháy. Nó thêm tham số filename*=UTF-8''… theo Request for Comments (RFC) 5987 cho tên không thuộc ASCII. Tên rỗng sẽ trở thành document.pdf.
Biện pháp kiểm soát 4 — Xác thực đường dẫn cấu hình
Phần tiêu đề “Biện pháp kiểm soát 4 — Xác thực đường dẫn cấu hình”Registry phông chữ từ chối giá trị fontsPath có chứa stream wrapper (://) hoặc byte null. Nó phát sinh lỗi thời gian chạy. Điều này chặn các đường dẫn được bao bọc như php:// hoặc phar://.
Biện pháp kiểm soát 5 — Bề mặt service-locator tối thiểu
Phần tiêu đề “Biện pháp kiểm soát 5 — Bề mặt service-locator tối thiểu”CodeIgniter 4 không cung cấp container PHP Standards Recommendation 11 (PSR-11). Nó dùng Services locator. PSR-11 §1.3 coi mẫu service-locator là không được khuyến khích (động từ tình thái SHOULD NOT). Gói giữ bề mặt locator ở mức nhỏ gọn: mỗi service có một phương thức factory được đặt tên. Hãy phân giải các service ở ranh giới controller. Hãy truyền các đối tượng cụ thể vào bên trong. Đừng truyền lớp Services vào mã miền nghiệp vụ.
Vận hành ký và TSA (NextPDF Pro / Enterprise)
Phần tiêu đề “Vận hành ký và TSA (NextPDF Pro / Enterprise)”Dịch vụ ký mặc định không hoạt động. Nó chỉ kích hoạt khi signature.enabled là true và signature.certificate không rỗng. Mức chữ ký mặc định của gói là B-B. NextPDF Pro cung cấp chữ ký cơ sở B-B. Xác thực dài hạn là một năng lực Enterprise riêng, được ghi trong tài liệu tham khảo Premium chứ không nằm ở đây.
Quy tắc vận hành:
- Hãy giữ các tệp chứng chỉ và khóa bên ngoài hệ thống quản lý mã nguồn. Hãy cung cấp chúng qua
.envhoặc trình quản lý bí mật. - Hãy giữ
tsa.allow_insecure_httpđược đặt thànhfalsetrong môi trường sản xuất. Kênh Time Stamping Authority (TSA) dạng văn bản thuần là không thể chấp nhận. - Hãy đặt
tsa.pinned_public_keyskhi TSA công bố khóa ổn định. Hãy giữtsa.warn_on_key_rotationđược đặt thànhtrue. - Hãy giới hạn quyền đọc tệp khóa cho riêng người dùng ứng dụng.
Danh sách kiểm tra vận hành
Phần tiêu đề “Danh sách kiểm tra vận hành”- Hãy ghim tất cả phiên bản đã phân giải trong
composer.lock. - Hãy yêu cầu
codeigniter4/queuetrong ứng dụng chạy các worker. - Hãy chạy queue worker dưới danh nghĩa người dùng có ít đặc quyền. Chỉ cấp cho worker quyền ghi vào
WRITEPATH/pdfs/. - Hãy cấp cho worker cùng các phần mở rộng NextPDF như tầng web. PDF được ký cần NextPDF Pro hoặc Enterprise trong môi trường worker.
- Hãy xác nhận các phần mở rộng
mbstringvàzlibcó sẵn trong mọi runtime tạo PDF. - Hãy xác nhận rằng các header phản hồi vẫn tồn tại qua reverse proxy.
- Hãy ghi nhật ký việc tạo PDF kèm theo ngữ cảnh. Đừng ghi nhật ký nội dung chứng chỉ hoặc mật khẩu khóa.
Tuân thủ
Phần tiêu đề “Tuân thủ”- Cách xử lý tải trọng hàng đợi phù hợp với OWASP ASVS V1.5.2.
- Cách xử lý đường dẫn đầu ra của hàng đợi phù hợp với OWASP ASVS V5.3.2.
- Thiết kế locator tuân theo hướng dẫn của PSR-11 §1.3.
Bối cảnh thương mại
Phần tiêu đề “Bối cảnh thương mại”NextPDF core được cấp phép theo Apache-2.0. Các trust anchor của chữ ký và biện pháp tăng cường bảo mật TSA được áp dụng khi NextPDF Pro hoặc Enterprise được cài đặt. Gói CodeIgniter cung cấp các phương thức service tương ứng; các phương thức này trả về null cho đến khi gói Premium tương ứng được cài đặt. Xem </get-license/?intent=codeigniter-signing>.
Xem thêm
Phần tiêu đề “Xem thêm”- /integrations/codeigniter/production-usage/ — đăng ký và điều phối hàng đợi đúng cách.
- /integrations/codeigniter/configuration/ — khóa ký, TSA và đường dẫn.
- /integrations/codeigniter/troubleshooting/ — các thông báo từ chối đã được xác minh.
- /integrations/codeigniter/overview/ — toàn bộ bề mặt API.