DXCMS v9.0.0 패치 내역
릴리즈: 2026-08-27
기준 버전: v8.8.3 → v9.0.0
패치 목록
| # | 패치명 | 분류 | 수정 파일 |
|---|---|---|---|
| 1 | 회원가입 이메일 인증 | 신규 기능 | 7개 |
| 2 | 뿌리오 SMS 드라이버 | 신규 기능 | 3개 |
| 3 | 최신글 위젯 N 뱃지 | 기능 개선 | 7개 |
| 4 | CKEditor clipboard 경고 제거 | 버그 수정 | 1개 |
| 5 | 게시판 핸들러 catParentSlug 누락 | 버그 수정 | 1개 |
| 6 | DxCache 레이스 컨디션 | 버그 수정 | 1개 |
| 7 | dx_error 400/403 로그 억제 | 버그 수정 | 1개 |
1. 회원가입 이메일 인증
개요
회원가입 시 이메일 인증 코드를 발송하여 실제 소유자인지 확인하는 기능입니다.
관리자에서 활성/비활성 전환이 가능합니다.
수정 파일
| 파일 | 작업 |
|---|---|
install/schema.sql |
dx_email_verifications 테이블 추가 |
install/migrate.php |
기존 설치자용 마이그레이션 블록 추가 |
admin/settings/index.php |
이메일 인증 활성화 체크박스 추가 |
core/auth/Auth.php |
register() 함수에 DB 기반 인증 검증 추가 |
core/auth/register.php |
인증 완료 이메일 자동 입력 및 readonly 처리 |
core/auth/email-verify.php |
이메일 인증 전용 페이지 (신규) |
core/api/email_verify_send.php |
인증코드 발송 API (신규) |
core/api/email_verify_check.php |
인증코드 확인 API (신규) |
extend/middle/10_email_verify_gate.php |
인증 미완료 시 인증 페이지로 리다이렉트 (신규) |
동작 흐름
/auth/register 접근
↓ (이메일 인증 ON + 미인증)
/auth/email-verify
→ 이메일 입력 → 코드 발송
→ 6자리 코드 입력 → PHP POST로 검증
→ DB used=1 저장 → /auth/register?em=이메일 이동
→ 이메일 input 자동 입력 + readonly
→ ✓ 이메일 인증 완료 표시
→ 가입 완료 후 used=3 소진
보안
- 6자리 랜덤 코드 + 10분 만료
- 5분 내 5회 실패 시 잠금
- 1분 재발송 쿨다운
hash_equals()로 타이밍 어택 방지Auth::register()백엔드 최종 검증 (DB 기반, JS 우회 불가)- 가입 완료 후 인증 레코드 즉시 소진 (재사용 불가)
관리자 설정
관리자 → 사이트 설정 → 보안 및 접근 설정
→ "회원가입 이메일 인증" 체크박스 On/Off
※ SMTP 설정 완료 후 활성화할 것
2. 뿌리오 SMS 드라이버
개요
뿌리오(Ppurio) API를 통해 SMS/LMS/MMS 문자를 발송하는 드라이버입니다.
수정 파일
| 파일 | 작업 |
|---|---|
core/DxSms.php |
뿌리오 드라이버 등록 지원 |
core/sms/DxPpurioSmsDriver.php |
뿌리오 API 드라이버 (신규) |
admin/sendsms/index.php |
관리자 문자 발송 화면에 뿌리오 선택 추가 |
extend/top/99_ppurio_sms.php |
드라이버 자동 등록 훅 (신규) |
뿌리오 사전 준비
| 순서 | 할 일 | 비고 |
|---|---|---|
| ① | 뿌리오 기업회원 전환 | 연동은 기업회원만 가능 |
| ② | 연동 신청 | 뿌리오 > 연동 > 연동 신청 (승인 영업일 1~2일) |
| ③ | 서버 IP 등록 | 뿌리오 > 연동 > 연동신청관리 |
| ④ | 인증키 확인 | 연동신청관리 화면에서 발급 |
| ⑤ | 발신번호 등록 | 뿌리오 > 발신번호 관리 |
관리자 설정
관리자 → 문자 보내기 → API 설정
→ 드라이버: 뿌리오 (Ppurio) 선택
→ 뿌리오 계정: [아이디 입력]
→ 연동 인증키: [인증키 입력]
→ 발신번호: [등록된 번호 입력]
→ 설정 저장
API 규격
| 항목 | 내용 |
|---|---|
| Rate Limit | 초당 15회 |
| SMS | 최대 90 byte |
| LMS | 최대 2,000 byte |
| MMS | JPG, 최대 300KB |
| 토큰 유효시간 | 24시간 (자동 갱신) |
3. 최신글 위젯 N 뱃지
개요
최신글 위젯에서 24시간 이내 작성된 게시글에 N 뱃지를 표시합니다.
수정 파일
| 파일 | 작업 |
|---|---|
core/functions.php |
dx_board_posts() 반환 배열에 created_at, is_truncated 추가 / 제목 … 제거 |
themes/default/board_latest/list.php |
N 뱃지 출력 추가 |
themes/default/board_latest/simple.php |
N 뱃지 출력 추가 |
themes/default/board_latest/card.php |
N 뱃지 출력 추가 |
themes/default/board_latest/basic/list.php |
N 뱃지 출력 추가 |
themes/default/board_latest/basic/simple.php |
N 뱃지 출력 추가 |
themes/default/board_latest/basic/card.php |
N 뱃지 출력 추가 |
출력 순서
제목 + … (잘린 경우) + N (24시간 이내) + [댓글수]
4. CKEditor clipboard 경고 제거
개요
CKEditor 에디터 사용 시 콘솔에 반복 출력되던 clipboard-image-handling-disabled 경고를 제거합니다.
원인
ckeditor.js 번들 내 uploadimage 플러그인에서 clipboard_handleImages 조건 감지 시 CKEDITOR.warn()을 호출하는 코드가 있었습니다.
수정 파일
| 파일 | 작업 |
|---|---|
assets/ckeditor4/ckeditor.js |
경고 발생 코드 제거 |
5. 게시판 핸들러 catParentSlug 누락
개요
게시판 스킨에서 $_catParentSlug 변수를 사용할 때 Undefined variable 에러가 발생하던 문제를 수정합니다.
원인
boards/handler.php의 compact() 호출 시 catParentSlug가 누락되어 스킨으로 전달되지 않았습니다.
수정 파일
| 파일 | 작업 |
|---|---|
boards/handler.php |
compact() 2곳에 'catParentSlug' 추가 |
6. DxCache 레이스 컨디션
개요
파일 캐시 읽기 시 No such file or directory 에러가 로그에 반복 기록되던 문제를 수정합니다.
원인
file_exists() 체크 후 file_get_contents() 사이에 다른 프로세스가 캐시 파일을 삭제하는 레이스 컨디션. Windows IIS 멀티 프로세스 환경에서 발생.
PHP 8.0+에서 @ 억제자가 error_log 기록을 막지 못하는 문제도 복합 작용.
수정 파일
| 파일 | 작업 |
|---|---|
core/DxCache.php |
file_exists() 제거, error_reporting(0) 일시 억제 후 읽기 처리 |
7. dx_error 400/403 로그 억제
개요
봇/크롤러의 잘못된 접근으로 인한 400, 403 에러가 로그에 반복 기록되던 문제를 수정합니다.
원인
dx_error() 함수에서 404만 로그 제외 처리하고 있었습니다.
수정 파일
| 파일 | 작업 |
|---|---|
core/functions.php |
dx_error() 로그 제외 조건에 400, 403 추가 |
⚠️ 마이그레이션 필수 안내
v9.0.0은 DB 구조 변경이 포함되어 있습니다.
기존 설치자는 반드시 아래 절차를 따라야 합니다. 누락 시 이메일 인증 기능이 정상 동작하지 않습니다.
신규 설치
install/schema.sql 교체 후 설치 진행 — dx_email_verifications 테이블이 자동 생성됩니다.
기존 설치 (필수)
파일 교체만으로는 부족합니다. 반드시 migrate.php를 실행하세요.
install/migrate.php파일 교체- 브라우저에서 아래 URL 접속
https://도메인/install/migrate.php
- 아래 항목이 완료되었는지 확인
- ✅
dx_email_verifications테이블 생성 - ✅
use_email_verify기본값0등록 - ✅
cms_version9.0.0 기록
- ✅
- 확인 후
install/migrate.php삭제 또는 접근 차단 권장