[KVE-2026-1927] 관리자 메뉴 코드 요청값 개입 차단 및 회원 내보내기 저장 경로 보완
관리자 페이지는 자신의 메뉴 코드를 변수에 지정한 뒤 공통 파일을 include 하는데, 공통 파일의 extract 처리로 그 값이 요청값으로 대체될 수 있었다. extract 이전에 요청 배열에서 해당 키를 제거하여 각 페이지가 지정한 값이 유지되도록 한다. 해당 키를 요청값으로 참조하는 코드는 없으므로 동작에 영향이 없다. 변수 자체를 unset 하는 방식은 페이지가 지정한 값까지 사라져 관리권한을 위임받은 계정이 자신의 메뉴에도 접근하지 못하게 되므로 사용하지 않는다. 회원 내보내기 파일의 저장 폴더와 파일 이름이 생성 시각만으로 구성되어 경로를 추측할 여지가 있어, 임의 문자열을 덧붙인다. 다운로드 주소는 서버가 생성해 전달하므로 기존 흐름에는 영향이 없으며, 지난 폴더 정리 조건도 함께 맞춘다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 7739b95be1fcbe764d888a9f0fba1522cc1ebacb)
This commit is contained in:
@@ -7,7 +7,9 @@
|
||||
define('MEMBER_EXPORT_PAGE_SIZE', 10000); // 파일당 처리할 회원 수
|
||||
define('MEMBER_EXPORT_MAX_SIZE', 300000); // 최대 처리할 회원 수
|
||||
define('MEMBER_BASE_DIR', "member_list"); // 엑셀 베이스 폴더
|
||||
define('MEMBER_BASE_DATE', date('YmdHis')); // 폴더/파일명용 날짜
|
||||
// 폴더/파일명용 날짜 - 저장 경로가 추측되지 않도록 임의 문자열을 덧붙인다.
|
||||
define('MEMBER_BASE_SALT', function_exists('get_random_token_string') ? get_random_token_string(8) : substr(md5(uniqid(mt_rand(), true)), 0, 8));
|
||||
define('MEMBER_BASE_DATE', date('YmdHis') . '_' . MEMBER_BASE_SALT);
|
||||
define('MEMBER_EXPORT_DIR', G5_DATA_PATH . "/" . MEMBER_BASE_DIR . "/" . MEMBER_BASE_DATE); // 엑셀 파일 저장 경로
|
||||
define('MEMBER_LOG_DIR', G5_DATA_PATH . "/" . MEMBER_BASE_DIR . "/" . "log"); // 로그 파일 저장 경로
|
||||
|
||||
|
||||
@@ -413,7 +413,7 @@ function member_export_delete($fileList = array())
|
||||
$name = basename($file);
|
||||
|
||||
// log 폴더와 오늘 날짜로 시작하는 폴더는 제외
|
||||
if ($name === 'log' || preg_match('/^' . date('Ymd') . '\d{6}$/', $name)) continue;
|
||||
if ($name === 'log' || preg_match('/^' . date('Ymd') . '\d{6}(_[A-Za-z0-9]+)?$/', $name)) continue;
|
||||
|
||||
if (is_file($file) && pathinfo($file, PATHINFO_EXTENSION) !== 'log' && @unlink($file)) {
|
||||
$cnt++;
|
||||
|
||||
Reference in New Issue
Block a user