파일백업 모듈(filebackup) 베타버전 <경고 : 절때로 안전한 버전 아님>
다운로드 : filebackup-v1.0.0.zip
다운로드 1차 : filebackup-v1.1.1.zip
파일 백업 -소개-





# 파일 백업 (filebackup) — 패치 노트
---
## v1.1.1 — 2026-07-25 (최종 검토)
### 🔒 보안 수정: OAuth 콜백에 CSRF(계정 연결 하이재킹) 방지 누락
- **문제**: Google Drive/Dropbox/OneDrive OAuth 연동에서 `state` 파라미터에 provider 이름만 실어 보내고(`state=gdrive` 등), 콜백(`procFilebackupAdminOAuthCallback`)에서 이 값을 검증 없이 그대로 신뢰했음.
- **위험**: 공격자가 자기 소유 클라우드 계정으로 인가 코드를 발급받은 뒤, 관리자가 로그인된 상태에서 그 코드를 실어 콜백 URL을 열게 하면(CSRF), 사이트가 그 코드를 교환해 **공격자의 refresh_token을 사이트의 백업 대상 클라우드 계정으로 저장**하게 됨 — 이후 모든 자동/수동 백업이 조용히 공격자의 클라우드로 올라갈 수 있었음.
- **수정**: `procFilebackupAdminOAuthStart`에서 예측 불가능한 난수를 생성해 세션에 저장하고, `state`에 `provider:난수` 형태로 실어 보냄. 콜백에서 세션에 저장된 값과 `hash_equals()`로 정확히 일치하는지 검증한 뒤 즉시 세션에서 제거(1회용) — 일치하지 않으면 토큰 교환 자체를 하지 않음.
### 🔒 보안 강화
- PHP 파일 4개 전부 상단에 `if(!defined('__XE__')) exit();` 가드 누락 — 라이믹스 루트 `.htaccess`가 `modules/` 안 일반 `.php` 직접 실행까지는 막아주지 않아 부트스트랩 없이 직접 실행될 위험이 있었음. 4개 파일 모두 추가.
### 참고: review_module의 "액션 파일 불일치" 에러 20건은 오탐
- admin 액션이 `filebackup.admin.controller.php`/`filebackup.admin.view.php`에 정의된 것을 두고 나오는 오탐 — 라이믹스의 정확한 관례라 실제 문제 아님 (다른 모듈 검토 때도 동일하게 확인됨). in_array()/count() PHP8 경고 10건도 전부 바로 위에서 배열이 항상 초기화된 걸 확인한 기존 오탐 패턴.
## v1.1.0 — 2026-06-22
### 백업 진행률 실시간 표시
- **사이트 점검 화면**에서 백업 진행률 실시간 표시
- `files/cache/filebackup_progress.json` 폴링 방식 (2.5초 간격)
- `.htaccess` RewriteRule 적용 제외 → 점검 모드 중에도 직접 서빙
- 단계별 라벨: 준비 중 → 파일 목록 수집 중 → 파일 압축 중 → 백업 완료
- 파일 카운터 표시 (`완료 / 전체 개수 (%)`)
- 경과 시간 표시
- meta refresh 60초 → 300초로 완화 (폴링으로 대체)
- **관리자 백업 화면**에도 동일한 진행률 바 + 경과시간 + 파일 카운터 추가
- Shell tar 방식: 단일 exec 특성상 진행률 대신 인디케이터(shimmer) 표시
### 백업 중단 기능
- 관리자 화면에 **🛑 백업 중단** 버튼 추가
- 취소 플래그 파일 방식 (`files/cache/filebackup_cancel.lock`)
- ZipArchive / PharData: 압축 루프 내 2초마다 취소 확인 → 즉시 중단 + 미완성 파일 삭제
- Shell tar: exec 완료 후 취소 플래그 확인 → 결과 파일 삭제
### 첨부파일 증분 백업 UX 개선
- 로딩 오버레이에 전체 백업 탭과 동일한 **진행률 바 + 경과시간 + 파일 카운터 + 중단 버튼** 추가
- `runAttachBackup()`에 `writeProgress()` 및 취소 체크 추가 (2초 간격)
- 단계: 스캔 중 → 압축 중 → 완료 / 중단됨 / 오류
### 증분 시작점 자동 동기화
- **전체 백업 완료 시** `files/attach/`가 백업에 포함된 경우, 그 시점의 첨부파일 전체 목록을 증분 매니페스트에 자동 기록
- 이후 증분 백업은 전체 백업 이후 추가·변경된 파일만 대상
- `files/attach`를 제외 목록에 포함한 경우 동기화 건너뜀
- 예약 백업 `full` 타입에서도 자동 동기화 적용
- 백업 완료 알림에 동기화 결과 안내 (`N개 파일 기록` 표시)
### 점검 화면 공용 적용
- 전체 백업 탭의 **"백업 중 점검 화면"** 설정이 첨부파일 증분 백업 실행 시에도 동일하게 적용
- 각 탭에 상호 안내 문구 추가
### 버그 수정
- 첨부파일 증분 백업 탭 언어 키 미번역 문제 수정
- `lang('txt_attach_desc')` 등 4개 키가 번역 없이 그대로 표시되던 문제 해결
---
## v1.0.0 Beta — 2026-06-21
### 최초 공개 릴리즈
#### 전체 백업
- Shell tar / PHP ZipArchive / PHP PharData 3가지 압축 방식 자동 감지
- 방식 수동 지정 가능 (자동 감지 / Shell tar / ZipArchive / PharData)
- 백업 저장 경로 설정 (웹루트 내·외부 모두 지원)
- 저장 경로 웹루트 내부인 경우 `.htaccess` 자동 보호
- 제외 폴더 선택 (files/attach, cache, compiled, thumbnails, logs, upload, member)
- 추가 제외 경로 직접 입력 (절대경로 / 웹루트 기준 상대경로)
- 백업 파일 목록 표시 (최신순, 크기·날짜 표시)
- 백업 파일 다운로드 / 삭제
- 백업 중 점검 화면 연동 (Rhymix 사이트 잠금 기능)
- 커스텀 점검 화면 (`sitelock.user.html`) 모듈 번들 템플릿 자동 복사·복원
- 관리자 IP는 점검 화면 없이 접속 허용
#### 첨부파일 증분 백업
- `files/attach/` 폴더 전용 별도 백업
- manifest(목록 파일) 기반 증분 방식 — 신규·변경 파일만 ZIP으로 묶음
- 전체 백업 강제 실행 옵션
- manifest 초기화 (다음 실행 시 전체 재백업)
- 백업 파일 목록 표시 (증분/전체 배지 구분)
- 첨부파일 통계 표시 (총 파일 수·용량)
#### 클라우드 연동 (7개 플랫폼)
- **FTP** — 패시브 모드 지원
- **SFTP** — SSH 개인키 인증 지원
- **S3 Compatible** — AWS S3 / Cloudflare R2 / Wasabi 등
- Signature v4 직접 구현 (외부 SDK 미사용)
- 100 MB 초과 시 Multipart Upload 자동 전환
- **WebDAV** — Nextcloud / ownCloud / NAS 등
- **Google Drive**
- 서비스 계정(JSON 키) 방식
- OAuth2 개인 계정 방식
- Resumable Upload (대용량 파일)
- **Dropbox**
- OAuth2 인증 (refresh_token 자동 갱신)
- 150 MB 초과 시 Chunked Upload 자동 전환
- **OneDrive / SharePoint**
- Microsoft OAuth2 인증 (refresh_token 자동 갱신)
- Upload Session (대용량 파일)
- 백업 완료 후 활성화된 플랫폼 전체 자동 업로드
- 연결 테스트 기능
- OAuth2 플랫폼 인증 흐름 내장 (Google Drive / Dropbox / OneDrive)
#### 예약 백업
- Rhymix `display.before` 트리거 기반 자동 실행 (별도 크론 설정 불필요)
- 실행 주기: N시간마다 / 매일 / 매주 / 매월
- 백업 종류 선택
- 전체 백업 (첨부파일 포함)
- 전체 백업 (첨부파일 제외) — 코드·설정만, 용량 절감
- 첨부파일 증분만
- 전체(첨부제외) + 첨부파일 증분 — 권장 조합
- 백업 완료 후 클라우드 자동 업로드 연동
- 오래된 백업 자동 삭제 (보관 수 지정)
- 동시 실행 방지 락 파일 (2시간 만료)
- 마지막 실행 시각·결과 대시보드 표시
- 다음 실행 예정 시각 표시
- 즉시 실행 버튼
#### 백업 속도 설정
- 프리셋 3종
- 🚀 터보 — 압축 레벨 1, 배치 500개, 대기 없음
- ⚖️ 균형 — 압축 레벨 6, 배치 100개, 5ms 대기 (기본값)
- 🤫 조용함 — 압축 레벨 3, 배치 30개, 30ms 대기
- 커스텀 — 압축 레벨·배치 크기·대기 시간 직접 조절
- Linux 서버: `ionice -c 3 nice -n 19` 자동 적용 (I/O·CPU 최하위 우선순위)
- PHP 배치 스로틀 (ZipArchive / PharData 방식)
- ZipArchive 터보 모드: CM_STORE (무압축) 자동 전환
---
## 예정 (v1.1 이후)
- 백업 복원 기능 (압축 해제 → 파일 덮어쓰기)
- 백업 완료·실패 이메일 알림
- DB 덤프 포함 옵션
- 백업 파일 암호화 (ZIP AES)
피드백을 받고 싶습니다.
사이트에서 백업을 진행시 일반 사용자에게 보여줄 점검화면 입니다.
무엇을 하고 있는지도 보여줍니다. 첨부파일 압축중 라고 나옵니다.