12 Commits

Author SHA1 Message Date
kappa
f1c46be7b6 feat: 그누보드5 R2 스토리지 확장 모듈 초기 설정
- Docker 개발 환경 구성 (nginx, php, mariadb)
- 그누보드 기본 extend 파일들 추가
- R2 파일 목록 확인 스크립트 추가
- .gitignore 설정 (gnuboard 코어, 테스트 파일 제외)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 20:09:12 +09:00
kappa
218c7cb334 docs: R2 스토리지 모듈 README 추가
- 지원 기능 명시 (게시판/에디터 , 프로필 )
- 프로필 이미지 R2 미지원 사유 문서화
  - 코어 수정 없이는 extend 훅으로 불가능
  - 로컬 저장이 최선의 선택임을 명시
- 설치/설정 방법 및 테스트 결과 포함

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 20:05:28 +09:00
kappa
8a508a8f5f feat: 에디터 파일 삭제 R2 훅 추가
- delete_editor_file 이벤트 훅 구현
- cheditor5, smarteditor2 에디터에서 이미지 삭제 시 R2에서도 삭제
- 파일 경로 패턴 매칭으로 R2 키 검색 후 삭제

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 17:27:47 +09:00
kappa
b8adee1825 feat: 추가 R2 훅 구현 (QA, 회원, 쇼핑몰, 컨텐츠)
- 1:1문의(QA) 첨부파일 업로드/다운로드 R2 연동
- 회원 아이콘/프로필 이미지 R2 마이그레이션
- 쇼핑몰 상품 이미지 R2 URL 지원
- 내용관리/FAQ 이미지 R2 마이그레이션
- 에디터 컨텐츠 URL R2 변환
- 관리자 회원 수정 R2 마이그레이션

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 17:22:43 +09:00
kappa
6f92cacfea feat: 에디터 이미지 업로드 R2 훅 추가
- cheditor5, smarteditor2 에디터 이미지 업로드 지원
- get_editor_upload_url 훅을 통한 R2 스토리지 연동
- 업로드 성공 시 로컬 파일 자동 삭제
- Presigned URL 생성으로 보안 접근 제공

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 17:08:46 +09:00
kappa
971a66773a chore: SVG 파일 형식 제외
- 보안상 SVG 허용 목록에서 제거
- validateSvg() 메서드는 유지 (추후 필요시 addAllowedType으로 활성화 가능)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 15:20:39 +09:00
kappa
949213beda feat: 에러 처리 개선 및 SVG 지원 추가
- SVG 파일 허용 (스크립트 검증 포함)
- 에러 코드 시스템 도입 (INVALID_FILE_ARRAY, EXT_NOT_ALLOWED 등)
- 모든 에러 메시지 한글화
- SVG 보안 검증 (script, onclick, javascript: 등 차단)
- getLastErrorCode(), getErrorMessage() 메서드 추가

사용자 친화적 에러 메시지:
- "허용되지 않는 파일 형식입니다."
- "파일 크기가 서버 설정 제한을 초과했습니다."
- "SVG 파일에 스크립트가 포함되어 있어 업로드할 수 없습니다."

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 15:18:39 +09:00
kappa
1b319b60c3 refactor: 화이트리스트 기반 파일 검증으로 전환
- 블랙리스트(위험 확장자 차단) → 화이트리스트(허용 타입만 통과)
- 미디어/문서/압축 파일만 허용 (40+ 확장자)
- MIME 타입과 확장자 매핑으로 정확한 검증
- 이미지는 getimagesize()로 추가 검증
- 이중 확장자 탐지 유지 (test.php.jpg 차단)
- 동적 허용 타입 추가 기능 (addAllowedType)

보안 향상: 알려지지 않은 공격 벡터도 자동 차단

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 15:14:53 +09:00
kappa
1d84bb603e feat: 웹쉘 공격 방어 강화
- 위험한 확장자 목록 확장 (50+ 확장자)
- 이중 확장자 탐지 (test.php.jpg → php 감지)
- finfo를 이용한 실제 MIME 타입 검증
- 파일 헤더 스캔으로 PHP/스크립트 시그니처 탐지
- Content-Type 스푸핑 공격 방어

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 15:10:53 +09:00
kappa
7385eb8436 chore: PHP 8.1+ 요구사항 및 의존성 잠금
- composer.json: PHP >= 8.1 요구
- composer.json: platform php 8.1.0 설정 추가
- composer.lock: 의존성 버전 잠금
- .gitignore: vendor 디렉토리 제외

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 15:07:20 +09:00
kappa
a7104b66fc fix: SQL 인젝션 취약점 및 입력 검증 수정
- r2_migrate_board_files(): SQL 인젝션 방지를 위해 escape 처리
- r2_migrate_board_files(): 테이블명 정규식 검증 추가
- handleUpload(): 파일 배열 필수 키 체크 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 14:59:43 +09:00
kappa
dd86ccb782 feat: Gnuboard5 Cloudflare R2 Storage Module
- R2StorageAdapter: S3 호환 클라이언트 래퍼
- R2FileHandler: 그누보드 통합 핸들러
- Presigned URL 지원
- 유저별 경로 분리 (users/{member_id}/...)
- 대용량 파일 멀티파트 업로드 지원
- 로컬 스토리지 폴백
- DB 마이그레이션 스크립트 포함

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 14:36:38 +09:00