Website bán vé xem phim sử dụng Java Sping Boot.
Xây dựng website quản lý bán vé xem phim với các tính năng chính: tìm kiếm phim, đặt vé, chọn suất chiếu và thanh toán. Đây là repo tổng hợp lại từ 2 repo khác do chính nhóm em phát triển:
- Back-end: https://github.com/FloRRenn/Java-Web/tree/backend
- Front end: https://github.com/FloRRenn/Fe-java/
Sinh Viên | MSSV | Github Username |
---|---|---|
Phạm Phúc Đức | 20520162 | ducdottoan2002 |
Nguyễn Hoàng Phúc | 20520277 | hoangfphucs |
Nguyễn Đức Tấn | 20520751 | FloRRenn |
Nguyễn Nhật Hiếu Trung | 20520830 | nnhieutrung |
-
Database: MySQL 8.0.32
-
Backend: Restful API
- Java 17
- Spring Boot 3.0.6
- Maven 3.9.1
- JWT (io.jsonwebtoken) 0.11.5
-
Frontend:
- HTML
- CSS
- JS
-
Khác:
- Docker: Cho phép triển khai project nhanh chóng trên các máy tính khác nhau.
- Nginx: Dựng server cho các web service trong docker.
- Sandbox của VNPay: Tích hợp ứng dụng thanh toán của VNPAY trong việc đặt vé.
docker-compose up --build --no-deps
docker-compose down
- Website chính (Front-end): https://localhost:80
- Hiển thị nội dung liên quan đến phim và cho phép đặt/thanh toán vé.
- Hiển thị nội dung liên quan đến phim và cho phép đặt/thanh toán vé.
- Website Admin (Front-end): https://localhost:81
- Trang admin cho phép quản lý các nội dung trên website chính và các user. Yêu cầu tài khoản có quyền
admin
để đăng nhập.
- Trang admin cho phép quản lý các nội dung trên website chính và các user. Yêu cầu tài khoản có quyền
- Website cho API (Back-end): https://localhost:9595
- Xử lý các request được gửi từ front-end.
- Xem chi tiết tại https://localhost:9595/swagger-ui/index.html
- Website cho Database (Back-end): https://localhost:32346
- Hiển thị trực quan database của web (dùng PHPMyAdmin).
Username | Password | Role |
---|---|---|
super_admin.1234 | 3Mt^tmM85YUL | Super Admin |
admin.1234 | TiNkErBeLl | Admin |
user_1 | k9G*Ni91r! | User |
user_2 | hS5f%1*8V1 | User |
- Ngân hàng:
NCB
- Số thẻ:
9704198526191432198
- Tên chủ thẻ:
NGUYEN VAN A
- Ngày phát hành:
07/15
- Mật khẩu OTP:
123456
- Đăng ký
- Xác thực tài khoản qua email
- Đăng nhập
- Đăng xuất
- Quên mật khẩu
- Xác nhận mật khẩu mới qua email
- Tìm kiếm phim theo từ khóa, thể loại
- Đặ̣t vé:
- Lựa chọn suất chiếu(ngày, giờ, phòng chiếu)
- Chọn chỗ ngồi
- Thanh toán (VNPAY, QR Code, Thẻ Nội Địa, Thể Quốc Tế) i
- Gửi vé điện tử và chi tiết thanh toán qua email khi thanh toán thành công.
- Quản lý user.
- Thêm, xóa, sữa dữ liệu liên quan đến các suất chiếu phim như: phim chiếu, lịch chiếu, phòng chiếu, số lượng ghế và lưu lại thông tin thanh toán.
roles
: Dùng để phân quyền người dùng, bao gồmSUPER_ADMIN
,ADMIN
,USER
sub
: Chứa username của người dùng.iat
: Lưu thời điểm tạo token.exp
: Lưu thời điểm hết hạn của token (sau 1 giờ kể từ lúc tạo)
Web API sử dụng JWT token để xác thực và phân quyền người dùng, thuật toán được sử dụng cho việc cấp và xác thực là RS256. Lỗ hổng này được mô phỏng dựa trên CVE-2015-9235, xảy ra là trang web sẽ dựa vào thuật toán trên phần header của token để thực hiện quy trình xác thực sẽ thuật toán đó. Khi trang web sử dụng thuật toán RS/ES để ký (dùng private key) và xác thực (dùng public key) cho token, nhưng khi kẻ tấn công có được public key, chúng sẽ sử dụng thuật toán HS (dùng public key cho cả việc ký và xác thực) để tạo token, khi đưa cho web kiểm tra, nó sẽ dựa vào thuật toán trong phần header của token để lựa chọn thuật toán xác thực, và vì cả thuật toán RS/ES và HS đều dùng public key để xác thực nên việc bypass sẽ thành công.
Hậu quả: Leo thang đặc quyền, có khả năng lấy và chỉnh sửa toàn bộ data có trong database thông qua các API.
Uri GET /api/auth/login không có cơ chế giới hạn lượt truy cập sau nhiều lần đăng nhập không thành công dẫn đến kẻ tấn công có thể thực hiện tấn công brute-force để dò mật khẩu của nạn nhân.
Trang web có chức năng thay đổi mật khẩu mới khi người dùng quên mật khẩu, khi đó một mã xác thực sẽ được gửi đến mail của người dùng, cho phép họ thay đổi mật khẩu cho mình. Trong mã xác thực này chứ tên của người dùng và thời hạn sử dụng, trang web sẽ dựa trên các thông tin này để cho phép đổi mật khẩu mới hay không, tuy nhiên mã xác thực này rất yếu, kẻ tấn công có khả năng tạo một mã xác thực khác tương tự và có thể thay đổi mật khẩu của bất kỳ user nào trong hệ thống.
Hậu quả: Đánh cắp thông tin và kiểm soát tài khoản của nạn nhân. Leo thang đặc quyền đối các tài khoản admin.
Lỗ hổng
Lỗ hổng
Lỗ hổng
© Group Pengu - University of Information Technology