# ULCMS Skeleton PHP 기반 유엘케이 CMS 기본 뼈대입니다. ## 이번 버전 주요 내용 - 관리자 로그인/권한/CSRF/보안 헤더 - 페이지 관리 및 프론트 페이지 출력 - 게시판 관리 및 프론트 게시판 엔진 - 게시판 접근 주소: `/board/{slug}` - 게시글 보기 주소: `/board/{slug}/{id}` - 게시글 작성 주소: `/board/{slug}/write` - 기존 호환 주소: `/b/{slug}`, `/p/{slug}` - 사이트맵 생성: `/sitemap.xml` - 파일 업로드 보안 검사 ## DB 정보 `inc/config.php`에서 설정합니다. ```php define('DB_NAME', 'ulkcms'); define('DB_USER', 'ulkcms'); define('DB_PASS', '!duf7Tlal_Qjf4wk'); ``` ## 설치 SQL 최초 설치 시: ```bash mysql -u ulkcms -p ulkcms < install/schema.sql ``` 관리자 권한 업그레이드가 필요한 기존 설치본: ```bash mysql -u ulkcms -p ulkcms < install/upgrade_20260707_admin_permissions.sql ``` ## 초기 관리자 - ID: `admin` - PW: `admin1234!` 운영 전 반드시 변경하세요. ## 2026-07-07 업데이트 - 게시판 글쓰기와 관리자 게시글 작성 화면에 기본 WYSIWYG 에디터를 추가했습니다. - 에디터 저장 시 `script`, `iframe`, 이벤트 속성, 외부 스타일 등 위험 요소를 제거합니다. - 기존 일반 텍스트 게시글은 줄바꿈 형태로 계속 표시됩니다. ## 에디터 플러그인 기본 에디터는 TinyMCE 플러그인입니다. ```php // inc/config.php define('CMS_EDITOR_PLUGIN', 'tinymce'); ``` 간단 내장 에디터로 되돌리려면 다음처럼 변경합니다. ```php define('CMS_EDITOR_PLUGIN', 'simple'); ``` TinyMCE는 기본적으로 CDN에서 로딩합니다. 외부 CDN을 사용하지 않으려면 TinyMCE self-host 패키지를 아래 경로에 넣으면 자동으로 로컬 파일을 사용합니다. ```text /plugins/editors/tinymce/tinymce/tinymce.min.js ``` 관리자 에디터 이미지 업로드는 `/admin/editor_image_upload.php`에서 처리하며, 이미지 MIME/확장자를 검사하고 `/uploads/editor/YYYY/MM/`에 저장합니다. ## 2026-07-07 에디터 플러그인 확장 관리자 > 환경설정에서 기본 WYSIWYG 에디터를 선택할 수 있습니다. 지원 플러그인: - TinyMCE - CKEditor 5 Classic - Summernote - TOAST UI Editor - Quill - Jodit Editor - Trumbowyg - ULK Simple Editor 각 에디터의 상용 사용 가능 여부와 라이선스 주의사항은 관리자 > 환경설정 화면의 표에서 확인할 수 있습니다. 실제 운영/상용 배포 전에는 각 에디터 공식 사이트의 최신 라이선스 조건을 반드시 확인하세요. 기존 설치본에는 아래 SQL을 한 번 실행하세요. ```bash mysql -u ulkcms -p ulkcms < install/upgrade_20260707_editor_plugins.sql ``` ## 에디터 설정 업그레이드 기존 설치본에서는 아래 SQL을 1회 실행하세요. ```bash mysql -u ulkcms -p ulkcms < install/upgrade_20260707_editor_settings.sql ``` 관리자 > 에디터 관리에서 기본 에디터, PC/모바일 높이, 에디터 프로필을 설정할 수 있습니다. ## 2026-07-07 업데이트 - 업로드 오류 처리 개선 - 게시판/관리자 게시글 작성 시 허용되지 않는 첨부파일 오류가 치명적 에러 화면으로 노출되지 않도록 수정했습니다. - 오류 발생 시 alert 안내와 화면 내 오류 메시지를 표시하고 입력 화면에 머물도록 보정했습니다. - md, markdown 첨부파일을 허용 확장자에 추가했습니다. ## 2026-07-07 Fix - 업로드 점검 페이지의 권한 함수 호출 오류를 수정했습니다. - 구버전 페이지 호환을 위해 require_permission() 별칭 함수를 추가했습니다. ## 업로드 폴더 권한 유엘케이 CMS는 업로드 권한을 루트 전체가 아니라 아래 3개 폴더로 분리합니다. - `/uploads/files` : 일반 첨부파일 - `/uploads/images` : 이미지 첨부파일 - `/uploads/editor` : 에디터 이미지 업로드 서버 관리자 권한이 있으면 `www-data` 소유자 방식이 권장됩니다. 일반 웹호스팅에서는 위 3개 폴더에만 `707` 또는 환경에 따라 `757` 권한을 부여하세요. CMS 전체나 웹 루트 전체에 `777` 권한을 주면 안 됩니다. 각 업로드 폴더에는 `.htaccess`가 포함되어 PHP/CGI/실행파일 접근을 차단합니다. ## 업로드 폴더 .htaccess 생성 위치 업로드 보안 차단용 `.htaccess`는 아래 위치에 생성되어야 합니다. ```text /home/ulkcms/www/uploads/.htaccess /home/ulkcms/www/uploads/files/.htaccess /home/ulkcms/www/uploads/images/.htaccess /home/ulkcms/www/uploads/editor/.htaccess ``` 일반 호스팅 사용자는 파일관리자나 FTP에서 위 폴더를 직접 확인하면 됩니다. `uploads`라는 표현만 보고 웹 루트 전체나 CMS 전체 폴더에 권한을 주지 마세요. 권한을 조정해야 하는 대상은 아래 3개 폴더입니다. ```text /home/ulkcms/www/uploads/files /home/ulkcms/www/uploads/images /home/ulkcms/www/uploads/editor ``` 웹호스팅에서 절대 권장하지 않는 대상: ```text /home/ulkcms/www /home/ulkcms/www/admin /home/ulkcms/www/inc ```