[최신글 7/13] 주의사항: 보안·권한·성능 — DXCMS
키워드: 주의, 보안, 비밀글, read_level, 성능, N+1, 멀티도메인, 답글 표기: (소스)=코드 확인·실행 검증, (README)=README 기재, (일반)=일반 지식
아래는 소스를 읽고 테스트 DB 로 실행해 확인한 사항입니다.
보안·노출
- 열람 권한 미확인 (실행 확인): read_level 이 1(회원) 또는 9(관리자)인 게시판도 비로그인 방문자에게 제목이 나옵니다. 6/13 의 my_latest 로 감싸세요.
- 비밀글 (실행 확인): dx_board_posts 배열에 비밀글의 제목과 발췌가 그대로 들어 있습니다. 번들 스킨은 is_secret 을 보고 숨기지만, 직접 만든 스킨·출력 코드는 반드시 is_secret 을 검사해야 합니다.
- 멀티도메인 (소스 읽기): 조회 조건에 게시판의 site_domain 이 없습니다. 도메인별 게시판을 나눠 쓴다면 확인이 필요합니다.
- 출력 시 항상 htmlspecialchars($값, ENT_QUOTES, 'UTF-8') 로 이스케이프하세요.
동작 특성
- 공지는 dx_board_latest 에서 항상 제외, 답글(parent_id)을 구분하는 조건은 없음 (소스)
- 카테고리·정렬·기간 필터가 없음 → 11/13 의 확장 함수 참고
- limit 은 1 미만이면 1, 숫자가 아닌 문자열은 정수로 변환되며 상한 없음 (실행 확인)
- 스킨 이름이 틀리면 오류 없이 basic/list 로 대체됨 (3/13)
- 아이콘 기본값은 비어 있음 (2/13)
성능 (실행 확인)
- 최신글은 캐시가 없습니다. 호출 1회마다 기본 2회 쿼리(게시판, 글 목록)가 나갑니다.
- 썸네일 컬럼과 본문
가 모두 없는 글은 글마다 첨부파일 조회 쿼리가 1회씩 추가됩니다. 측정: limit 5 요청에 글 4개가 반환되고 그중 이미지 없는 글이 3개일 때 총 5회 쿼리.
- 글 본문(content) 전체를 읽어 옵니다. 긴 글이 많으면 무겁습니다. 발췌가 필요 없으면 dx_board_posts 의 $excerptLen 을 0 으로 하세요.
- 홈에 여러 개를 놓는다면 6/13 의 캐시를 권장합니다.
다음: 8/13 개발 ① 스킨 규칙과 변수