Ứng dụng web Java (WAR) mẫu chứa một số servlet và trang JSP minh họa.
Thông tin dự án (lấy từ pom.xml):
- groupId: org.example
- artifactId: web-os
- version: 1.0-SNAPSHOT
- packaging: war
- Java target: 1.8
Project này có mục đích học tập / demo: hiển thị cách triển khai servlet, trả về file ảnh từ hệ thống tập tin, và (cảnh báo) một số servlet minh họa thực thi lệnh hệ thống từ input của user.
- Java 8 (hoặc tương thích với
maven.compiler.source= 1.8) - Maven (sử dụng
mvnw.cmdcó sẵn) hoặc Maven cài sẵn - Servlet container tương thích Servlet 4.0 (ví dụ Apache Tomcat 9.x)
src/main/java/org/example/webos/- các servlet/command classes:HelloServlet-> mapping:/hello-servletBlindCmd-> mapping:/contactBypassCmd-> mapping:/runcommandImageCmd-> mapping:/pathOutputCmd-> mapping:/outputcmdSimpleCmd-> mapping:/simplecmd
src/main/webapp/- chứa các trang JSP:index.jsp,bypass.jsp,contact.jsp,contactoutput.jsp,output.jsp,simple.jsp, thư mụcimages/với nội dung mẫu.
- Mở cửa sổ cmd ở thư mục gốc project (nơi chứa
mvnw.cmd).
mvnw.cmd clean package- Sau khi build thành công, file WAR sẽ được tạo trong
target/với tên theo mẫuweb-os-1.0-SNAPSHOT.war(tên dựa trên artifactId/version). Triển khai file WAR này lên Tomcat bằng cách copy vào%TOMCAT_HOME%\webapps\rồi khởi động Tomcat.
Ví dụ URL (sau khi deploy vào Tomcat mặc định cổng 8080):
http://localhost:8080/{context}/
Trong đó {context} là tên WAR (ví dụ web-os-1.0-SNAPSHOT nếu deploy trực tiếp file WAR). Một số endpoint ví dụ:
- Hello: GET /{context}/hello-servlet
- Contact (BlindCmd - POST): POST /{context}/contact (form field
command) - Run command (BypassCmd - POST): POST /{context}/runcommand (form field
command) - Serve file/image (ImageCmd - GET): GET /{context}/path?filename=...
- OutputCmd (POST): POST /{context}/outputcmd (form field
command) - SimpleCmd (POST): POST /{context}/simplecmd (form field
command)
Gửi request ví dụ với curl trên Windows (cmd):
curl -X GET "http://localhost:8080/{context}/hello-servlet"
curl -X POST -d "command=dir C:\\" "http://localhost:8080/{context}/simplecmd"
curl -X GET "http://localhost:8080/{context}/path?filename=index.jsp"- Nhiều servlet trong project thực thi lệnh hệ điều hành dựa trên input của người dùng (ví dụ
SimpleCmd,BypassCmd,OutputCmd,BlindCmd). Điều này rất nguy hiểm nếu ứng dụng được triển khai trong môi trường không an toàn hoặc được truy cập từ bên ngoài. Tuyệt đối không deploy ứng dụng này lên môi trường production hoặc môi trường có dữ liệu nhạy cảm. ImageCmdcho phép đọc file từ hệ thống tập tin; có khả năng path traversal hoặc rò rỉ thông tin nếu không kiểm soát. Luôn validate và giới hạn đường dẫn tới thư mục an toàn.- Nếu bạn muốn tiếp tục phát triển, hãy loại bỏ hoặc hạn chế chức năng exec, áp dụng danh sách trắng các lệnh được phép, escape/validate input, và sử dụng cơ chế xác thực/ủy quyền.
- Thêm kiểm tra/filtration cho tham số
command(ví dụ whitelistdir,type, ... hoặc tốt hơn: không thực thi lệnh từ input thô). - Nếu muốn chạy nhanh ở môi trường dev mà không cần Tomcat, bạn có thể thêm plugin Jetty hoặc Tomcat Maven plugin và chạy
mvnw.cmd tomcat7:run(hoặc cấu hình phù hợp) — hiện repository chưa có cấu hình plugin đó.
Không có giấy phép cụ thể được thêm vào repository. Sử dụng theo mục đích học tập.
Tài liệu này được tạo tự động dựa trên nội dung file pom.xml và các lớp servlet trong src/main/java/org/example/webos/.