회원가입 | 고객센터 |
DESIGNONEX
DesignOneX CMS
로그인 회원가입
고객센터

DX CKEditor 4 Pro 1.3.0 패치

D DX관리자
2026.09.06 21:57 2 0
원본 게시글 링크
https://designonex.com/dxcms-plugin/view/1786646048735841
패치 버전
1.3.0

dx-ck-pro 패치 내역

버전 정보

항목 내용
플러그인 dx-ck-pro (DX CKEditor Pro)
패치 날짜 2026-09-06


패치 1 — 댓글/답글 이미지 업로드 403 오류

증상

댓글 수정 및 답글 작성 시 이미지 업로드 실패.

POST /api/upload 403 (Forbidden)

댓글 새 작성은 정상, 댓글 수정과 답글에서만 발생.


원인

comment-override.jsCKEDITOR.replace() 설정에서 fileUploadRequest 이벤트 핸들러가 누락되어 있었습니다.

CKEditor는 드래그&드롭 또는 붙여넣기로 이미지를 업로드할 때 fileUploadRequest 이벤트를 발사하고, 이 이벤트 핸들러에서 XHR 헤더를 설정합니다. 핸들러가 없으면 X-CSRF-Token 헤더가 전송되지 않아 서버의 CSRF 검증에서 403이 반환됩니다.

일반 글쓰기 에디터(js_builder.php)에는 핸들러가 있어 정상 동작했으므로 댓글/답글에서만 증상이 나타났습니다.


수정 파일

plugins/dx-ck-pro/js/comment-override.js


변경 내용

on 블록의 instanceReady 다음에 fileUploadRequest, fileUploadResponse 핸들러 추가.

// 추가된 코드
fileUploadRequest: function (evt) {
    if (USE_UPLOAD && CSRF) {
        evt.data.fileLoader.xhr.setRequestHeader('X-CSRF-Token', CSRF);
    }
},

fileUploadResponse: function (evt) {
    if (!USE_UPLOAD) return;
    evt.stop();
    var loader = evt.data.fileLoader;
    var r;
    try { r = JSON.parse(loader.xhr.responseText); } catch (e) {}
    if (!r) { evt.cancel(); return; }
    if      (r.uploaded && r.url)                     evt.data.url = r.url;
    else if (r.success  && r.files && r.files.length) evt.data.url = (r.baseurl || '') + (r.path || '') + r.files[0];
    else if (r.location)                              evt.data.url = r.location;
    else if (r.urls     && r.urls.length)             evt.data.url = r.urls[0];
    else evt.cancel();
}


영향 범위

기능 패치 전 패치 후
댓글 새 작성 — 이미지 업로드 ✅ 정상 ✅ 정상
댓글 수정 — 이미지 업로드 ❌ 403 ✅ 정상
답글 — 이미지 업로드 ❌ 403 ✅ 정상
일반 글쓰기 — 이미지 업로드 ✅ 정상 ✅ 정상


패치 2 — 콘솔 디버그 로그 제거

증상

브라우저 개발자 도구 콘솔에 디버그 로그가 출력되어 운영 환경에 불필요한 정보가 노출됨.

[DX-CKPro][EMOTICON] 로드됨
[DX-CKPro][LINKPASTE] 로드됨
[DX-CKPro][QUOTE] 로드됨
[DX-FileLoad][INIT] 시작
[DX-FileLoad][INIT] _dxProPluginBase :: "..."
[DX-FileLoad][INIT] _dxProMammothUrl :: "..."
[DX-CKPro][LAYOUT] 로드됨
[DX-CKPro][CODE] 로드됨
[DX-CKPro][INIT] 에디터 초기화 edId=dxpro_comment_content_...
[DX-CKPro][INIT] _dxProPluginBase=...
[DX-CKPro][INIT] _dxProMammothUrl=...
[DX-CKPro][INIT] _dxProEmoticonTabs count=11
[dxtablegrid] plugin.js loaded
[dxtablegrid] plugin init, editor=...
[dxtablegrid] instanceReady, editor=...


원인

개발 단계에서 추가된 console.logdxLog() 호출이 운영 배포본에 그대로 포함됨.


수정 파일 및 내용

파일 제거한 로그
plugins/dx-ck-pro/plugin.php dxLog 함수 내 console.log / instanceReady[DX-CKPro][INIT] 4줄
plugins/dx-ck-pro/js/emoticon.js [DX-CKPro][EMOTICON] 관련 dxLog 호출
plugins/dx-ck-pro/js/layout-modal.js [DX-CKPro][LAYOUT] 관련 dxLog 호출
plugins/dx-ck-pro/js/quote-modal.js [DX-CKPro][QUOTE] 관련 dxLog 호출
plugins/dx-ck-pro/js/code-modal.js [DX-CKPro][CODE] 관련 dxLog 호출
plugins/dx-ck-pro/js/linkpaste.js [DX-CKPro][LINKPASTE] 관련 dxLog 호출
plugins/dx-ck-pro/js/fileload.js [DX-FileLoad][INIT] 관련 console.log 호출
assets/ckeditor4-pro/plugins/dxtablegrid/plugin.js [dxtablegrid] 관련 console.log 호출

서버 측 로깅(data/ck_error.log)은 유지됩니다. 콘솔 출력만 제거했습니다.



설치 방법

압축 해제 후 DXCMS 루트에 덮어쓰기.

assets/
  ckeditor4-pro/
    plugins/
      dxtablegrid/
        plugin.js               ← 패치 2
plugins/
  dx-ck-pro/
    plugin.php                  ← 패치 2
    js/
      comment-override.js       ← 패치 1
      code-modal.js             ← 패치 2
      emoticon.js               ← 패치 2
      fileload.js               ← 패치 2
      layout-modal.js           ← 패치 2
      linkpaste.js              ← 패치 2
      quote-modal.js            ← 패치 2
첨부파일 1개 회원전용

댓글0

로그인 후 댓글을 작성할 수 있습니다.
EXT 패치 9
번호 제목 작성자 날짜 조회
공지
패치 게시판을 오픈합니다.
D DX관리자
07.01 24
DX관리자 · 2
DX관리자 · 17
5
미니클럽 게시판  [1]
DX관리자
07.22 27
DX관리자 · 27
2
DX 포인트 뷰 플러그인
DX관리자
07.20 21
DX관리자 · 21
1
DX DB Manager 1.0.1 패치
DX관리자
07.12 25
DX관리자 · 25
45
전체 회원
1,400
전체 게시글
2,757
전체 댓글
38
오늘 방문
53,647
전체 방문
0
현재 접속
인기글 7일 이내
최신글
최신댓글
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록
목록