콘텐츠 상단/하단 파일 경로를 저장 전에 먼저 정규화한 뒤 확장자와 위치를
검증하도록 순서를 조정한다. 정규화 과정에서 확장자가 사라져 검증을
우회하던 경로를 차단한다. 실행 직전 bbs/content.php 에서도 승인 확장자와
data 디렉터리 귀결 여부를 다시 확인하는 is_content_include_allowed() 를
적용하고, 콘텐츠 상단/하단 이미지 업로드는 이미지 파일만 허용하도록 검사한다.
미완료주문 상세의 결제방법 출력에 get_text() 인코딩을 적용하고, 임시주문
저장 시 정제한 결제수단 값을 원본에도 반영한다. 개인결제 주문 세션은
결제정보 검증을 통과한 뒤에만 설정한다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 196255d76912531d7e13861821bd59ca15c967d1)
에스크로 배송등록 실패 시 알림 대신 주문 관리자 메모에 결과를 기록하고
이후 처리를 중단한다. 현금영수증 발급 후 DB 반영에 실패한 경우 자동 취소
요청을 제거하고 관리자가 나이스페이에서 직접 확인하도록 안내를 변경한다.
가상계좌 취소 요청금액이 없을 때의 응답 코드를 명시한다.
patch_5631 의 '회귀 점검 후 결제 및 쿠폰존 보강'(4405ddc1c) 중
나이스페이 관련 변경만 적용했다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 3f6d013f9466d11eacba29e81ad515a9a0ceeeef)
cp_price 가 두 번 선언되어 있어 하나를 제거하고, 폼 본문에서 참조하는
cz_id 를 초기화 대상에 추가한다.
cz_id 참조 지점은 현재 앞쪽 조건의 단축 평가로 도달하지 않으나,
조건이 바뀔 경우를 대비해 초기화 목록을 참조 항목과 일치시킨다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit c03b311e789642f0af3fe898e040afea28733e7c)
캡챠가 문서 최하단에 생성되어, 확인을 누르면 페이지 끝까지 강제로
스크롤된 뒤 입력해야 했다. 페이지가 길어 위치를 찾기 어렵다는 의견이
있어 상단 고정 영역의 확인 버튼 옆에 노출하도록 변경한다.
- 캡챠 영역을 확인 버튼과 같은 고정 영역으로 이동하고 패널 형태로 표시
- 고정 노출이므로 강제 스크롤을 제거하고 입력란 포커스로 대체
- 좁은 화면에서 관리자 메뉴에 가려지지 않도록 표시 순서 조정
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 39b7637bab609600a21118966968f46ab1fb6546)
board_list.php 의 검색대상 값은 a.gr_id 이나 링크가 gr_id 로 전달하여
그룹에 속한 게시판이 조회되지 않던 문제를 수정한다.
접두사가 없는 gr_id 는 최고관리자가 아닌 경우 그룹 테이블을 함께
조회하는 구조에서 컬럼 모호성 오류가 발생하므로 a.gr_id 로 맞춘다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit c6dd497a450bd5ba08d743efc26ba73fcdd9e626)
검색필드가 SQL 컬럼명 위치에 검증 없이 삽입되던 관리자 목록 9개
파일에 허용 컬럼 목록을 추가한다. 허용 컬럼은 각 화면의 검색 UI가
제공하는 항목 기준이며, 미허용 값은 빈 문자열이 아닌 유효 컬럼으로
대체하여 SQL 문법 오류를 방지한다.
- adm/auth_list.php
- adm/board_list.php
- adm/boardgroup_list.php
- adm/boardgroupmember_list.php
- adm/point_list.php
- adm/poll_list.php
- adm/popular_list.php
- adm/shop_admin/inorderlist.php
- adm/shop_admin/personalpaylist.php
adm/member_list.php 의 불필요한 주석 제거
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit ff56beff8c6804013e830eb828779e02493cee52)
- 모니터 알림과 KG 대사 배치 쿼리에도 주문 환불금액을 포함해
현황 목록·상세 화면과 동일한 기준으로 판정하도록 정리
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 1388bc323724128acf78b15a49767e39f9709491)
- 부분취소 이력이 있는 주문은 잔여 금액을 부분취소로 처리해 전체취소 지원
- 부분취소로 전액 환불된 주문과 KG에서 이미 취소된 주문은 주문 취소만 진행
- PG 승인취소 미선택 시 차단하지 않고 주문만 취소하며 처리 내용을 이력에 기록
- 남은 품목 취소로 주문 전체가 취소되는 경우에도 PG 취소 여부 확인창 표시
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 전자결제/본인확인/SMS 신청 링크를 sir.kr 최신 경로로 교체
- 신용카드 전자결제에 나이스페이먼츠 추가(4개 1열 배치, 카드 폭 조정)
- 나이스페이먼츠 신청 버튼 이미지 추가
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 상품이벤트/개인결제복사/SMS 번호·그룹·폼·업로드/방문로그 삭제 등
POST 기반 상태변경 처리에 check_request_origin() 적용 (스킨 수정 불필요)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- member_list·index·couponzonelist·inorderlist·personalpaylist의
정렬 컬럼/방향 값을 허용 목록으로 제한하여 ORDER BY 절에 임의 값 삽입 차단
- 기존 다른 목록 파일과 동일한 in_array 화이트리스트 패턴 적용
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 쿠폰/희망배송일/검색어/계정/결제 콜백 등 입력값을 SQL 컨텍스트에 맞게 재처리
- dt_data·PG 응답 등 비-GPC 값과 소셜 provider 입력 정제 보완
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
게시판 설정의 bo_sort_field 가 허용 목록 검증 없이 저장·사용되어
목록 조회 ORDER BY 절에 임의 표현식이 들어갈 수 있던 문제 수정.
정렬값은 따옴표로 감싸지 않아 escape 로 막히지 않으므로,
게시판 관리 권한 계정이 저장한 값이 비로그인 목록 조회에서
실행될 수 있었음.
get_board_sort_fields() 의 허용 목록(관리자 드롭다운과 동일)으로
저장(adm/board_form_update.php)과 사용(bbs/list.php) 양쪽을 검증.
허용 목록 외 값은 기본 정렬로 무력화하여 이미 저장된 값도 차단.
function_exists 가드로 부분 패치 환경 대비.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
member_update.php 가 get_token()(HMAC) 으로 발급한 토큰을
member_update_run.php 가 check_admin_token()(세션) 으로 검증해
항상 불일치 → 오류 HTML 반환으로 AJAX JSON 파싱이 실패하던 문제 수정.
sms_admin 의 다른 _run 들과 동일하게 검증측(check_admin_token)은
유지하고, 실행 시 ajax.token.php 로 세션 토큰을 발급받아 본 요청에
사용하도록 변경. check_admin_token 의 1회용 소거 특성상 재실행에도
견고함.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
내장함수에 null 이 전달되어 PHP 8.1+ 에서 경고가 발생하던 것을
isset 삼항 / 문자열 캐스팅으로 보정.
- adm/member_form.php: number_format(mb_point), substr(mb_id) 2곳,
substr(mp_register_day) — null/미정의 시 0 또는 빈 문자열 처리
- plugin/htmlpurifier/extend.video.php: strstr 인자 (string) 캐스팅
표시·동작 변화 없음. PHP 5.2~8.3 호환 유지(?? 미사용).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- adm/shop_admin/orderform.php: 주문상세 hidden 의 od_hp 출력에
get_text() 적용 (인접한 od_name 과 동일 처리, 누락분 보완)
- bbs/member_cert_refresh_update.php: 본인확인 갱신 후 이동 URL 에
check_url_host() 적용
- plugin/social/includes/functions.php: 소셜 로그인/연동 후 이동
URL 2곳에 동일하게 check_url_host() 적용
login_check.php 등 기존 코드와 동일한 호스트 검증 패턴으로,
같은 도메인/상대경로 복귀는 그대로 동작하고 타 도메인 이동만 차단.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
영카트 주문자명/받는분/입금자명(od_name, od_b_name, od_deposit_name)
이 일부 출력 지점에서 인코딩 없이 노출되어, 저장된 값이 HTML/속성
컨텍스트에서 그대로 렌더링되던 문제 수정. 다음 출력에 get_text() 적용:
- adm/shop_admin/orderform.php, sale1today.php (관리자 주문 화면)
- shop/orderinquiryview.php (PC/모바일/테마 주문조회)
- shop/{inicis,kcp,lg,nicepay,toss}/taxsave_form.php (현금영수증 발행 폼)
- shop/mail/orderupdate{1,2,3}.mail.php, ordermail.mail.php (주문 메일)
비회원 주문 시 입력값이 관리자 화면에서 실행될 수 있는 경로를 차단.
폼 value 의 엔티티는 브라우저 제출 시 디코딩되므로 PG 전송값 및
정상 표시에는 영향 없음.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
카카오 우편번호 서비스의 oncomplete 콜백이 userSelectedType
으로 'R'(도로명) 또는 'J'(지번)을 반환하는데, 서버 측 정규식이
'N|R' 만 허용해 지번 선택 시 빈 문자열로 저장되던 문제를 수정.
N 은 print_address() 의 도로명 표기 분기를 위한 레거시 값으로
호환을 위해 유지.
적용 위치: 회원가입(bbs/register_form_update.php), PC/모바일
주문(shop/, mobile/shop/ orderformupdate.php), 관리자 미완료
주문(adm/shop_admin/inorderformupdate.php) 의 7곳.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
lib/common.lib.php 에 csv_safe_cell() 헬퍼 추가 (function_exists
가드 포함). 셀 값이 = + - @ TAB CR 로 시작하면 작은따옴표를 prefix
하여 스프레드시트가 수식으로 해석하지 못하도록 변환.
다음 출력 지점에서 사용자 입력 컬럼에 적용:
- adm/shop_admin/orderprintresult.php (CSV + XLS 두 분기)
- adm/shop_admin/orderdeliveryexcel.php
- adm/member_list_exel_export.php
- adm/sms_admin/num_book_file_download.php
호출부는 function_exists('csv_safe_cell') ? ... : 원본 폴백 형태로
감싸서 lib 미업데이트 환경에서도 fatal error 없이 동작하도록 함.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- adm/qa_config_update.php / adm/contentformupdate.php :
qa_include_head/tail, co_include_head/tail 가 super 가드 없이 변경 가능해
하위 관리자가 임의 PHP 경로를 include 시킬 수 있던 LFI 위험을
board_form_update.php 와 동일한 패턴(super 외에는 기존 값 유지)으로 차단.
- adm/member_form_update.php / adm/member_list_update.php :
신규 회원 생성·일괄 수정 시 부여하려는 mb_level 상한 검증이 없어
하위 관리자가 자기보다 높은 등급을 부여할 수 있던 권한 상승을 차단.
- adm/shop_admin/categorylistupdate.php /
adm/shop_admin/itemformupdate.php :
is_include_path_check 호출에서 두 번째 인자(is_input=1) 누락으로
rar/php/zip wrapper 등 경로 wrapper 차단이 동작하지 않던 부분을
is_include_path_check($file, 1) 로 강화.
- adm/shop_admin/orderdeliveryupdate.php /
adm/shop_admin/orderpartcancelupdate.php /
adm/sendmail_test.php :
상태 변경 동작에 check_admin_token() 누락으로 발생하던 CSRF 위험을
토큰 검증 추가로 차단. sendmail_test 폼에는 hidden token 필드 추가.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>