Bảo vệ ứng dụng Web Tomcat
tomcat chuyển đổi WAR thành một cấu trúc Tomcat tự chứa đầy đủ. Khi chạy, nó sử dụng các thành phần Tomcat có sẵn trong bộ mã hóa mà không cần truy cập vào phiên bản Tomcat được cài đặt trên máy người dùng.
1. Thao tác qua giao diện GUI
-
Chọn Tomcat WAR trên trang loại ứng dụng.

-
Chọn tệp WAR đầu vào, Phiên bản Java đi kèm và nền tảng đích, sau đó chọn chế độ đơn giản hoặc chế độ nâng cao.

-
Khi sử dụng chế độ nâng cao, hãy chọn Tomcat 9/10.1 hoặc để hệ thống tự phát hiện, đồng thời thiết lập các thông số như Context Path, tham số JVM và quy tắc loại trừ tùy theo nhu cầu; chế độ đơn giản sẽ đề xuất phiên bản Tomcat thông qua việc quét khả năng tương thích. Ý nghĩa của các tùy chọn được giải thích trong Cài đặt chế độ nâng cao của Protector4J.

-
Chọn thư mục đầu ra, kiểm tra tóm tắt các thông số, sau đó nhấn Run protection.

2. Ví dụ sử dụng CLI
Đường dẫn Context được chỉ định:
p4j tomcat app.war dist --context /app
Quét khả năng tương thích và đề xuất ứng dụng được bảo vệ tự động:
p4j tomcat app.war --compat-scan
p4j tomcat app.war dist --compat-apply --context /app
Hai tùy chọn này không thể được sử dụng đồng thời; sự khác biệt giữa chúng là:
| Tùy chọn | Hành vi | Thời điểm sử dụng |
|---|---|---|
--compat-scan | Chỉ quét tập tin WAR đầu vào, in ra các rủi ro và đề xuất cấu hình rồi thoát; không tiến hành mã hóa hay tạo ra dist, vì vậy không cần thư mục đầu ra | Sử dụng nó để xem báo cáo trước tiên sau khi bảo vệ ứng dụng lần đầu, nâng cấp các phụ thuộc liên quan đến Tomcat, điều chỉnh phạm vi bảo vệ hoặc cấu hình JSP, cũng như khi khắc phục các vấn đề về tính tương thích |
--compat-apply | Sau khi quét, các khuyến nghị thận trọng sẽ được tự động kết hợp, sau đó tiếp tục mã hóa và tạo ra kết quả đầu ra; vì vậy cần phải chỉ định thư mục đầu ra. | Khi đã đọc kết quả quét và chấp nhận các khuyến nghị tự động, có thể sử dụng chúng để hoàn tất việc đóng gói; nó cũng có thể được dùng cho việc xây dựng lặp lại với các quy tắc đã được kiểm tra hoặc trong quy trình CI. |
Đối với tomcat và --compat-apply, có thể thêm các lớp loại trừ dựa trên kết quả quét, đồng thời điều chỉnh các tùy chọn như phiên bản Tomcat, ZIP overlay và phần mở rộng tệp nén. Đối với ba tùy chọn cuối cùng, giá trị được chỉ định rõ ràng trong dòng lệnh sẽ có ưu tiên; các lớp loại trừ được đề xuất sẽ mặc định được kết hợp với --exclude. Nếu không muốn thêm các lớp loại trừ tự động, có thể đồng thời sử dụng --no-compat-excludes. Công cụ quét chỉ thực hiện phân tích heuristic tĩnh, những vấn đề cần sửa đổi mã nguồn sẽ không được --compat-apply tự động sửa chữa; sau khi tạo ra, vẫn cần tiến hành kiểm thử tái hiện trên nền tảng mục tiêu.
Đối với các lệnh CLI khác, tất cả các tùy chọn, biến môi trường và ví dụ tự động hóa, vui lòng tham khảo Tham khảo tham số CLI.
Mặc định --tomcat-version chính là auto. Khi cần thiết, có thể chỉ định rõ ràng 9 hoặc 10.1.
p4j tomcat app.war dist --context /app --tomcat-version 10.1
3. Cấu trúc đầu ra
dist/
├── bin/
│ ├── catalina.sh
│ ├── startup.sh
│ ├── shutdown.sh
│ └── *.bat
├── conf/p4jx/
│ ├── contexts.list
│ ├── protected-classes.list
│ └── allowed-prefixes.list
├── protected/
│ └── app.p4jx
├── lib/
│ ├── p4jx-tomcat-runtime.jar
│ └── tomcat-runtime-deps.jar
├── vlxjre/
├── run.sh
└── run.bat
Mặc định sẽ không tạo ra tệp WAR vật lý. web.xml, các tài nguyên tĩnh, các lớp công khai, dữ liệu siêu dữ liệu mẫu và các implementation bảo vệ đều nằm trong protected/<context>.p4jx, sau đó được P4JX WebResourceSet trình bày cho Tomcat.
4. Khởi động và dừng
Chạy ở mặt tiền:
./run.sh
Khởi động nền theo phong cách Tomcat:
./bin/startup.sh
./bin/shutdown.sh
Windows sử dụng tệp tương ứng là .bat. Nhật ký sẽ được ghi vào thư mục đầu ra logs/.
Các tham số khởi động JVM
Khi đóng gói, bạn có thể nhập một tham số mỗi dòng trong JVM startup options của giao diện GUI, hoặc sử dụng CLI:
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Sau khi triển khai, hãy thực hiện việc chỉnh sửa trực tiếp:
- macOS/Linux: Chỉnh sửa
bin/catalina.sh, thêmJVM_OPTS+=("-Xms1g" "-Xmx2g")sauJVM_OPTS=(...)bên trongrun_java(); điều này sẽ có hiệu lực khi chương trình được khởi động ở chế độ nền hoặc chế độ ngoại tuyến vớistartup.sh. - Màn hình chính của Windows: Chỉnh sửa
bin\catalina.bat, thêmset "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"sau chuỗiset "JVM_OPTS=..."hiện có. - Chế độ nền Windows: Thêm
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"trước khi gọicatalina.battừbin\startup.bat. Nếu muốn sử dụng chung một bộ tham số vĩnh viễn cho cả chế độ nền và chế độ tiền cảnh, nên tạo lại chúng thông qua GUI/CLI.
Khi khởi động tạm thời, cũng có thể thiết lập APP_JAVA_OPTS ngay trước lệnh. Các ví dụ đầy đủ về CMD, PowerShell và script có thể được xem tại Cấu hình tham số khởi động JVM.
5. Lựa chọn phiên bản Tomcat
| Không gian tên API WAR | Tomcat | Yêu cầu về Java |
|---|---|---|
javax.servlet.* | Tomcat 9 | Java 8/11/17/21/25 |
jakarta.servlet.* | Tomcat 10.1 | Java 11/17/21/25 |
Việc phát hiện tự động ưu tiên xác định không gian tên API từ các lớp ứng dụng và mô tả triển khai, trong khi tên tệp JAR chỉ được dùng làm bằng chứng hỗ trợ. Khi phát hiện sự kết hợp giữa javax và jakarta, công cụ sẽ từ chối việc đoán tự động.
6. JSP
Khi WAR chứa JSP, chúng sẽ được tự động biên dịch sơ bộ thành các lớp servlet và bản đồ URL ngay trong giai đoạn mã hóa. Lý do là việc biên dịch JSP động tại thời gian chạy sẽ tạo ra các lớp mới từ thư mục làm việc của Tomcat, điều này không phù hợp với việc bảo vệ các giới hạn định nghĩa lớp tại thời gian chạy.
Có thể kiểm soát một cách rõ ràng:
--precompile-jsp
--no-precompile-jsp
Trong môi trường sản xuất, nên giữ nguyên chế độ tiền biên dịch tự động mặc định. Nếu vô hiệu hóa nó, các ứng dụng chứa JSP có thể gặp sự cố khi truy cập trang.
7. Phạm vi bảo vệ và quy tắc loại trừ
Mặc định sẽ bảo vệ các lớp ứng dụng thuộc WEB-INF/classes, trong khi các lớp phụ thuộc vào WEB-INF/lib sẽ không được bảo vệ theo mặc định. Có thể loại trừ các lớp hướng tới Web:
p4j tomcat app.war dist \
--context /app \
--exclude 'com.example.web.**,com.example.dto.**'
Nên ưu tiên loại trừ các lớp servlet/filter/listener, DTO, tệp cấu hình, lớp thực thể, các lớp kết nối JNI và những lớp cần được tăng cường bởi container. Việc quét khả năng tương thích sẽ đưa ra những khuyến nghị thận trọng.
8. Thêm ứng dụng vào cùng một gói Tomcat
p4j tomcat second.war dist \
--append-app \
--context /second
Ràng buộc:
- Đường dẫn context không được trùng với các ứng dụng đã tồn tại;
- Các ứng dụng cũ và mới phải sử dụng cùng một phiên bản chính của Tomcat, phiên bản Java và nền tảng đích.
- Khi không cung cấp
--append-app, công cụ sẽ từ chối ghi vào các gói Tomcat hiện có; - Chọn “Append application to an existing Tomcat folder” trong giao diện GUI và chọn trực tiếp thư mục hiện có.
9. Lưu ý khi sử dụng Java 8
Mục tiêu Java 8 sẽ tự động kích hoạt tính năng ZIP overlay, giúp Tomcat WebResourceSet có thể mở các tập tin nén được bảo vệ.