https://github.com/minhi0449/file-extension-blocker
파일 확장자 차단 프로그램 / Java, Spring Boot, JPA, MySQL
https://github.com/minhi0449/file-extension-blocker
aws file-extension-blocker file-security file-upload github-actions java mysql spring-boot spring-data-jpa thymeleaf
Last synced: 5 months ago
JSON representation
파일 확장자 차단 프로그램 / Java, Spring Boot, JPA, MySQL
- Host: GitHub
- URL: https://github.com/minhi0449/file-extension-blocker
- Owner: minhi0449
- Created: 2025-08-23T16:03:03.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-08-24T13:41:08.000Z (11 months ago)
- Last Synced: 2025-09-17T17:45:57.732Z (10 months ago)
- Topics: aws, file-extension-blocker, file-security, file-upload, github-actions, java, mysql, spring-boot, spring-data-jpa, thymeleaf
- Language: Java
- Homepage:
- Size: 113 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 파일 확장자 차단 (File Extension Blocker)
> **개발 날짜 : 2025. 08. 24**
> url : http://13.209.67.184:8080/block ****
보안 위험이 높은 실행형 파일(exe, sh 등)의 업로드를 방지하기 위한 Spring Boot 3 + JPA 기반 정책 관리/검증 서비스입니다.
관리 화면에서 고정 확장자(체크박스)와 커스텀 확장자(칩 UI)를 관리하며, 업로드 시 서버 단 최종 검증으로 차단합니다.
## 사용 기술 (Tech Stack)
| 분야 | 스택 |
|----|------|
| **Backend** |    |
| **Frontend** |     |
| **Database** |  |
| **DevOps** |  -F7931E?style=flat&logo=amazon-aws&logoColor=white) |
## 프로젝트 하이라이트
| 구분 | 요약 |
|---|---|
| **핵심 기능** | 고정 확장자 차단 토글, 커스텀 확장자 추가/삭제, 업로드 시 차단 여부 판정 및 이력 저장 |
| **아키텍처** | Controller – Service – Repository – Entity 4계층 구조, 설정값 바인딩(ConfigurationProperties) |
| **검증 전략** | 프론트 1차 필터링 + **서버 최종 검증(권한자)** 로 보안 우회 방지 |
| **사용성** | 칩 UI로 추가/삭제 직관적 관리, 새로고침 시 상태 유지(DB 반영) |
| **관측성** | 업로드 이력 저장(허용/차단, 시간), Hibernate SQL 로그 트레이싱 |
---
## 요구사항
- **1-1. 고정 확장자**: 자주 차단하는 확장자 리스트. 기본 **unchecked**.
- **1-2. 고정 확장자 토글**: 체크/해제 시 **DB 저장**되며, 새로고침 후에도 유지.
*(커스텀 영역에는 표시되지 않음)*
- **2-1. 커스텀 확장자 입력 길이**: **최대 20자**
- **2-2. 추가 버튼 클릭 시**: **DB 저장** 후 화면 아래 칩 영역에 렌더
- **3-1. 커스텀 확장자 최대 개수**: **최대 200개**
- **3-2. 칩의 X 클릭 시**: **DB에서 삭제** 및 화면 제거
## 추가로 고려한 점
- **커스텀 확장자 중복 체크**
이미 존재하는 값은 DB/화면에 중복 저장되지 않도록 차단.
- **서버단 최종 검증**
프론트에서 먼저 막더라도 업로드 시 **서버(`FileUploadService.isFileUploadAllowed`)**가
고정/커스텀 정책을 재확인하여 **최종 차단 여부** 결정.
- **정규화(Normalization)**
비교 전 소문자 처리 + 선행 `.` 제거로 `.EXE`, `Exe`, `.exe` 등 모두 동일하게 취급.
- **고정 확장자 중복 금지**
커스텀 추가 시 고정 확장자 목록과 **중복 불가**.
- **업로드 이력(Audit Trail)**
`upload_history` 테이블에 파일명/확장자/허용여부/시간 저장 → 사후 추적·통계 가능.
- **화이트리스트 전환 고려**
현재는 블랙리스트(차단 리스트) 방식이지만, 서비스 레이어 분리로 화이트리스트 전환 용이.