🔐로그인하면 문서 작성, 프로젝트 게시, ZIP 기반 버전 업로드, 브랜치 생성 기능을 사용할 수 있습니다. 로그인하러 가기

T2Editor 9.1.1 대비 9.1.2-alpha1.0.1 CHATGPT비교감사 보고서

Answer Summary

T2Editor 9.1.1 대비 9.1.2-alpha1.0.1 비교감사 보고서 = [목차] 분류:T2Editor 분류:감사 분류:내부문서 본 보고서는 T2Editor 9.1.1을 기준선으로 하여 9.1.2-alpha1.0.1 패키지 전체를 비교감사한 결과를 정리한 것이다. 전체 파일 수는 양 버전 모두 69개이며, 신규 …

소유자 👤 Tak2
브랜치 ⎇ main
리비전 r1
작성자 Tak2
수정 3일 전
요약 최초 작성
파일alpha1.0.1검증허용업로드개선OriginURL

T2Editor 9.1.1 대비 9.1.2-alpha1.0.1 비교감사 보고서

#T2Editor #감사 #내부문서

감사 결론

본 보고서는 T2Editor 9.1.1을 기준선으로 하여 9.1.2-alpha1.0.1 패키지 전체를 비교감사한 결과를 정리한 것이다. 전체 파일 수는 양 버전 모두 69개이며, 신규 추가·삭제 파일 없이 18개 파일에서 총 3,907라인 규모의 실질 변경이 확인되었다. 감사 결과, 9.1.2-alpha1.0.1은 업로드 보안, 비디오 처리, 편집기 출력 경계, 파일 블럭 복원성, 코드블럭 입력 안정성, 설정 공통화 측면에서 9.1.1 대비 현저한 개선이 이루어진 것으로 판단된다. 다만 일부 협업 엔드포인트의 CORS 정책, IPv6 literal 호스트 처리, 특정 비기본 포트 환경에서의 Origin 엄격성 등 후속 보완이 필요한 항목이 남아 있으므로 최종 판정은 '''조건부 적정'''으로 한다.

1. 감사 개요

항목내용
기준 버전9.1.1
비교 대상 버전9.1.2-alpha1.0.1
조사 범위패키지 전체 69개 파일
추가/삭제 파일없음
변경 파일18개
변경 규모총 3,907라인(추가+삭제 기준)
감사 관점코드 취약점, 코드 완성도, 사용자 경험, 운영 안정성
최종 판정'''조건부 적정'''

2. 감사 방법

2.1 조사 절차

  1. 양 버전 패키지 전체 파일 목록 대조
  2. 변경 파일 18개 식별
  3. 전체 파일 인벤토리 및 기능군별 전수 검토
  4. 변경 파일 전수 diff 분석
  5. 변경 PHP 파일 문법 검사
  6. 변경 JavaScript 파일 문법 검사
  7. 허용 도메인, Origin, MIME/매직바이트 검증, URL 허용 로직에 대한 스팟 테스트

2.2 조사 기준

  • 서버측 입력 검증이 확장자·크기 수준을 넘는지 여부
  • HTML/JS 문맥에 대한 출력 이스케이프와 컨텍스트 분리가 이루어졌는지 여부
  • 외부 URL 허용 정책이 중앙화되어 있는지 여부
  • 업로드 후 블럭 생성, 저장, 재로딩, 뷰어 표시까지의 생명주기가 일관적인지 여부
  • 편집기 입력 동작이 브라우저/기기별로 안정화되었는지 여부

3. 비교 총괄

3.1 버전 간 구조 변화

구분9.1.19.1.2-alpha1.0.1평가
업로드 검증확장자·크기 중심MIME·매직바이트·파일명 정제·Origin 검증 공통화대폭 개선
Host/URL 정책HTTP_HOST 무검증, 허용 도메인 체계 없음Host 형식 검증 + 허용 도메인 정책 중앙화개선
비디오 뷰어외부 URL 오판정 및 상대경로 검증 미흡same-origin/허용 도메인 기반 허용 + 경로 포함 검증개선
파일 플러그인업로드/복원/오디오 표시 재연결 취약업로드 위임, 블럭 마킹, 복원성 강화개선
코드블럭 편집일부 환경 Enter 두 번 입력 이슈beforeinput/keydown 보강개선
paste/sanitize수제 sanitizer와 평문 재삽입 혼재이벤트 제거, URL 프로토콜 차단, 평문 이스케이프 강화개선
설정 조회중복 함수/전역 CORS공통 함수 재사용, Origin 검증개선
협업 보조 엔드포인트전역 CORS 및 정리 로직 불일치일부는 그대로 유지잔존 과제

3.2 변경 파일 목록

번호파일변화 성격
1config/get_upload_config.php중복 선언 제거, Origin 검증 통합
2config/nsfw_api_browser.jsNSFW 브라우저 런타임 보강
3config/t2_config.phpHost 검증, 허용 도메인 공통화, 경로 계산 보강
4config/upload_config.php업로드 공통 보안 경계 대폭 강화
5editor.lib.php출력 경계/XSS 방어, 컨텍스트 분리, textarea 이스케이프
6js/core.jspaste 경계, autosave 복원, URL 프로토콜 차단, 예외 방지
7js/utils.js모달 className 입력 정제
8plugin/code/code.js코드블럭 복원 및 Enter 입력 안정화
9plugin/file/file.js파일 블럭 위임·복원·표시 안전화
10plugin/file/file_upload.phpuid 정제 완화, 공통 검증 연계, JSON 응답 안정화
11plugin/file/pdf_view.php출력 이스케이프·경로 처리 보강
12plugin/image/image.cssNSFW/SafeAI UI 보강
13plugin/image/image.jsNSFW 진행 UI, 업로드 래퍼, 모달 안정화
14plugin/image/image_upload.phpOrigin·자원 제한·검증 강화
15plugin/table/table.js붙여넣기 이벤트 속성 제거
16plugin/video/video.js업로드 위임·응답 파싱·표시 안전화
17plugin/video/video_view.php허용 도메인 기반 비디오 재생 경로 재설계
18readme.txt버전 정보 갱신

4. 보안성 비교 평가

4.1 업로드 보안

9.1.1의 업로드 경계는 사실상 확장자와 파일 크기 중심이었다. 이에 비해 9.1.2-alpha1.0.1에서는 config/upload_config.php를 공통 보안 계층으로 재정의하여 다음 요소가 실제 반영되었다.

  • check_request_origin() 도입 및 POST/PUT/DELETE의 빈 Origin 차단
  • sanitize_original_name() 도입
  • verify_file_magic_bytes() 도입
  • validate_upload_file()$tmp_path 확장
  • 이미지 최대 픽셀 수, 엄격 WebP 정책 도입
  • 비디오 MIME/매직바이트 허용 범위의 현실화

'''감사의견'''
9.1.1 대비 가장 개선 폭이 큰 영역이다. 위장 확장자, 내용 불일치 파일, 환경별 MIME false negative 문제를 동시에 다루었다는 점에서 보안성과 실사용성을 함께 개선하였다.

4.2 출력 경계 및 XSS 방어

9.1.1에서 가장 치명적인 결함이었던 editor.lib.php의 raw textarea 출력과 JS bootstrap 문자열 구성은 9.1.2-alpha1.0.1에서 구조적으로 보강되었다.

주요 개선점:

  • json_encode(JSON_HEX_TAG | JSON_HEX_AMP) 적용
  • $safe_id HTML 속성 이스케이프
  • JS 컨텍스트에서 raw $id를 별도 json_encode()로 사용
  • hidden textarea의 $contenthtmlspecialchars() 적용
  • 로드 헬퍼(CSS/JS link/script)의 URL 구성 요소 이스케이프

'''감사의견'''
9.1.1 기준 critical로 판단되었던 영역이 9.1.2-alpha1.0.1에서는 실질적으로 해소되었다. 특히 hidden textarea와 </script> 탈출 문제를 동시에 잡았다는 점은 중요하다.

4.3 클라이언트 sanitizer 및 붙여넣기 경계

9.1.1의 js/core.jsinnerHTML 재삽입과 얕은 sanitizer에 의존했다. 9.1.2-alpha1.0.1에서는 다음 보강이 추가되었다.

  • 붙여넣기 시 before/after 평문 HTML 이스케이프
  • autosave 복원 시 script 제거 및 on* 속성 제거
  • foreign HTML 정리 단계에서 script, style, on* 속성 제거
  • 이미지/iframe clone 시 위험 프로토콜 및 이벤트 속성 제거
  • sanitizeHTML()에서 style 허용 제거, href/src 프로토콜 검증 추가

'''감사의견'''
9.1.1 대비 공격면이 현저히 축소되었다. 다만 완전한 검증된 sanitizer 라이브러리 수준에는 아직 미치지 못하므로, 향후 DOMPurify급 대체는 여전히 권고할 수 있다.

4.4 비디오 재생 경계

9.1.1의 plugin/video/video_view.phphttp로 시작하는 절대 URL을 그대로 허용하거나, 반대로 내부 절대 URL을 외부 URL로 오판정하는 구조였다. 9.1.2-alpha1.0.1에서는 다음과 같이 재설계되었다.

  • t2_config.php 기반 허용 도메인 공통화
  • t2editor_is_allowed_url() 도입
  • same-origin 및 명시적 allowlist 도메인만 허용
  • 상대경로는 realpath() 기반 포함 검증 유지
  • MIME 타입 확장 및 출력 이스케이프 보강

'''감사의견'''
보안성과 기능성을 함께 개선한 대표 사례다. 9.1.1에서 발생했던 비디오 업로드 후 재생 불가, 외부 URL 오판정, 경로 검증 부재 문제가 동시에 해소되었다.

4.5 Host/Origin 정책

9.1.1은 HTTP_HOST를 검증 없이 URL 상수 계산에 사용했고, 설정 조회 경로에는 전역 CORS가 존재했다. 9.1.2-alpha1.0.1에서는 다음 개선이 확인되었다.

  • HTTP_HOST 형식 검증
  • T2EDITOR_ALLOWED_URL_DOMAINS 및 공통 함수 도입
  • get_upload_config.php에서 전역 CORS 제거, 공통 Origin 검증 사용

'''감사의견'''
운영 환경 신뢰 경계가 9.1.1 대비 한 단계 성숙했다. 다만 IPv6 literal 파싱과 비기본 포트 환경에서의 Origin 엄격성은 후속 보완 대상이다.

5. 코드 완성도 및 아키텍처 평가

5.1 코드 완성도

9.1.2-alpha1.0.1은 9.1.1 대비 “기능을 추가한 버전”이라기보다 “기능이 살아 있는 상태에서 안전하고 유지보수 가능한 방향으로 정리한 버전”에 가깝다.

관찰된 개선점:

  • 업로드 공통 경계를 설정 레이어로 승격
  • 허용 도메인 정책을 t2_config.php에 중앙화
  • 파일/이미지/비디오 업로드를 각 플러그인 공개 API로 위임
  • 예외 발생 가능 지점(rangeCount, selection null 등)에 가드 추가
  • DOMNodeInserted 의존을 MutationObserver로 대체
  • generateUid()의 충돌 가능성을 crypto.randomUUID() 폴백 구조로 완화

'''감사의견'''
아키텍처 관점에서 9.1.1보다 분명히 성숙한 형태다. 특히 공통 정책을 설정 계층으로 올리고, 플러그인별 업로드를 해당 플러그인으로 되돌린 설계는 유지보수성과 일관성 측면에서 높은 평가가 가능하다.

5.2 잔존 과제

  • plugin/collab/collab_number_delete.phpAccess-Control-Allow-Origin: * 유지
  • IPv6 literal 호스트 파싱 미흡
  • 동일 출처라도 포트가 명시된 환경에서는 Origin 비교가 엄격하게 동작함
  • js/core.js는 여전히 자체 sanitizer 유지 구조이므로 장기적으로는 대체 권고 가능

6. 사용자 경험(UX) 비교 평가

6.1 체감 개선 항목

9.1.2-alpha1.0.1은 보안 패치 성격이 강하지만, 사용자 체감 개선도 적지 않다.

  • 파일 블럭 생성·재로딩·삭제/이동/오디오 표시 복원 개선
  • 비디오 업로드 실패 및 비디오 블럭 재생 실패 문제 해소
  • 코드블럭 Enter 입력 안정화
  • NSFW/SafeAI 진행률 표시와 모달 정리 개선
  • 필수 플러그인 로드 타이밍 보정으로 초기 로딩 안정성 향상

6.2 UX 평가

항목9.1.19.1.2-alpha1.0.1평가
비디오 업로드환경 의존적 실패 가능안정화개선
파일 블럭 복원일부 누락 가능구조적 복원 로직 강화개선
코드블럭 입력일부 기기 불안정개행 안정화개선
NSFW 모델 로딩상태 피드백 제한적진행률/상태 UI 보강개선
모달/Selection 안정성예외 노출 가능rangeCount 가드 등 보강개선

7. 문법 검사 및 테스트 결과

7.1 문법 검사

변경 PHP 파일 및 변경 JavaScript 파일에 대해 문법 검사 결과 오류가 확인되지 않았다.

7.2 스팟 테스트 결과

테스트결과판정
t2editor_get_allowed_domains() same-origin/allowlist정상 동작양호
비허용 외부 도메인 차단정상 차단양호
POST + 빈 Origin차단양호
비정상 Origin차단양호
허용 포트 일치 Origin허용양호
위장 .mp4 업로드매직바이트 불일치로 차단양호
PHP 문법 검사전부 통과양호
JavaScript 문법 검사전부 통과양호

8. 잔존 위험 및 권고

등급항목설명권고
중간협업 삭제 엔드포인트 CORSplugin/collab/collab_number_delete.php에 전역 CORS 유지same-origin 또는 allowlist로 축소
낮음IPv6 literal 호스트 처리허용 도메인 함수가 IPv6 표현을 완전 처리하지 못함IPv6-aware 정규화 추가
낮음포트 민감 Origin 비교https://example.comhttps://example.com:8443를 엄격 구분운영 가이드 또는 정규화 보완
낮음수제 sanitizer 유지개선되었으나 장기적으로 검증된 라이브러리 대체 여지 존재중장기 로드맵 반영

9. 최종 판정

최종 의견

9.1.2-alpha1.0.1은 9.1.1 대비 보안성, 코드 완성도, 사용자 경험이 모두 의미 있게 향상된 버전이다. 특히 9.1.1의 핵심 결함으로 지적될 수 있었던 업로드 검증, 비디오 뷰어, 출력 경계, 파일 블럭 복원, 코드블럭 입력 안정성은 상당 부분 개선되었다. 다만 협업 보조 엔드포인트 CORS, IPv6 literal 처리, 일부 운영 설정 민감도는 잔존하므로 최종 판정은 '''조건부 적정'''으로 한다.

9.1 배포 의견

  • 내부 시험 운영: 적정
  • 알파 단계 외부 시험 배포: 적정
  • 공개 서비스 확장 배포: 협업/CORS 및 운영 설정 보완 후 권고
이 문서가 링크하는 문서 · 0
아직 내부 링크가 없습니다. 본문에 [[다른-문서]]를 넣으면 연결이 생깁니다.
백링크 · 0
아직 이 문서를 가리키는 다른 문서가 없습니다.
관련 문서
직접 연결된 관련 문서가 아직 없습니다.
문서 연결 지도

이 문서를 중심으로 들어오는 링크와 나가는 링크를 한 번에 볼 수 있습니다.

전체 보기
현재 문서 백링크 나가는 링크 양방향 연결
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내