Task 1-3: Guard create-account-fake Endpoint
Phase: 1 - Security Priority: Medium Module:
authenticationDepends on: Không có Blocks: task-4-1 Reference:docs/BountyHunter-Backend/details/feature-authentication/SPEC.md
Background
POST /api/auth/create-account-fake tạo user giả mà không có bất kỳ guard nào. Nếu tồn tại trên production, có thể bị lợi dụng để tạo tài khoản tùy ý.
Tasks
File: authentication/controllers/auth/AuthController.java
DI / Import notes per option: - Option A:
@Profile— importorg.springframework.context.annotation.Profile. Không cần inject thêm bean; Spring container tự xử lý khi load context. - Option B:HttpServletRequest— importjakarta.servlet.http.HttpServletRequest(hoặcjavax.servletnếu dùng Spring Boot 2.x).ForbiddenExceptionphải là class đã được khai báo trong project (kiểm tra tạicommon/exception/hoặc tương đương).isInternalRequest(HttpServletRequest)phải là một helper method được khai báo trong chínhAuthControllerhoặc một utility class được inject vào. - Option C: Không cần thêm import hay dependency.
- [ ] Chọn một trong các options:
Option A (đề xuất): Profile guard
@Profile("!main")
@PostMapping("/create-account-fake")
public void createAccountFake(@Valid @RequestBody BaseMap baseMap) { ... }
Option B: Internal IP check
@PostMapping("/create-account-fake")
public void createAccountFake(HttpServletRequest request, @Valid @RequestBody BaseMap baseMap) {
if (!isInternalRequest(request)) {
throw new ForbiddenException("NOT_ALLOWED");
}
// ...
}
Option C: Xóa endpoint nếu không còn dùng
- [ ] Nếu chọn Option A hoặc C: verify endpoint không xuất hiện trong production swagger/routes
- [ ] Document decision trong code comment
Verification / Acceptance Criteria
- [ ] Compile check:
AuthController.javacompile thành công với option đã chọn — không có lỗi import thiếu (Profile,HttpServletRequest,ForbiddenException, v.v.). - [ ] Option A — Profile guard: Khởi động application với
spring.profiles.active=main→POST /api/auth/create-account-faketrả HTTP 404 (endpoint không được register). - [ ] Option A — Non-main profile: Khởi động với profile khác (ví dụ:
dev) → endpoint hoạt động bình thường. - [ ] Option B — IP check: Request từ IP nội bộ → thực thi; request từ IP bên ngoài → nhận HTTP 403
NOT_ALLOWED. - [ ] Option C — Removed: Endpoint không tồn tại trong codebase và không xuất hiện trong Swagger/OpenAPI spec.
- [ ] No regression: Các endpoint khác của
AuthControllerkhông bị ảnh hưởng (compile và runtime bình thường).
Files to Modify
authentication/src/main/java/com/figpop/authentication/controllers/auth/AuthController.java