Skip to content

ltkdung/web-os

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

web-os

Ứ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

Mục đích

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.

Yêu cầu

  • Java 8 (hoặc tương thích với maven.compiler.source = 1.8)
  • Maven (sử dụng mvnw.cmd có sẵn) hoặc Maven cài sẵn
  • Servlet container tương thích Servlet 4.0 (ví dụ Apache Tomcat 9.x)

Cấu trúc thư mục chính

  • src/main/java/org/example/webos/ - các servlet/command classes:
    • HelloServlet -> mapping: /hello-servlet
    • BlindCmd -> mapping: /contact
    • BypassCmd -> mapping: /runcommand
    • ImageCmd -> mapping: /path
    • OutputCmd -> mapping: /outputcmd
    • SimpleCmd -> 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ục images/ với nội dung mẫu.

Build và chạy (Windows - cmd.exe)

  1. Mở cửa sổ cmd ở thư mục gốc project (nơi chứa mvnw.cmd).
mvnw.cmd clean package
  1. Sau khi build thành công, file WAR sẽ được tạo trong target/ với tên theo mẫu web-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"

Cảnh báo bảo mật quan trọng

  • 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.
  • ImageCmd cho 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.

Gợi ý phát triển

  • Thêm kiểm tra/filtration cho tham số command (ví dụ whitelist dir, 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 đó.

Liên hệ / License

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/.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published