fix(release): 7.0.7 릴리즈 검증 발견 결함 전수 처리 및 출시일 8/18 정렬
7.0.7 페이로드 전수 검증에서 발견된 error 4건·warn 14건을 릴리즈 전에 처리했다. 미출시 분량의 자체 결함(회원 통합검색 500, 관리자 스코프 403 의 500 위장 등)이므로 페이로드에 합류시키고, 출시 대상 26개 CHANGELOG 의 버전 섹션 날짜를 2026-08-18 로 정렬했다. - 통합검색 import 복원 + 이커머스 관리자 typed 403 catch 대칭(테스트 동반) - admin 판정 스니핑 사설 사본 전수 수렴(BoardResource) + 조건 스캔 테스트 - 스케줄 인터프리터 변형 표기(확장자·버전 접미사) 정규화 차단 - ckeditor5 참조 판정 배치화·fail-safe, 결제 플러그인 진단 페이로드 대칭 - 템플릿 다크 대비·상태 Select value-제어 + --production 재빌드 - Upgrade_7_0_7 잔존 중복 색인 정리 스텝, API 문서·i18n(ko/en/ja) 동기
This commit is contained in:
@@ -167,6 +167,51 @@ class ScheduleCommandValidatorTest extends TestCase
|
||||
$this->assertSame(ScheduleCommandValidator::SHELL_REASON_INLINE_CODE, $verdict['reason']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 변형 표기(Windows `.exe` / 버전 접미사)로 등재된 인터프리터도 분류를 비켜가지 못한다.
|
||||
*
|
||||
* 분류 목록(`script_interpreters`/`reject_binaries`)은 기본 이름만 담으므로,
|
||||
* 정확 일치 분류 시절에는 운영자가 `python.exe`·`python3.12` 로 등재하면
|
||||
* "일반 스크립트 — 통과" 분기를 타 인라인 코드 차단이 통째로 무력화됐다.
|
||||
*
|
||||
* @param string $command 변형 표기 인터프리터로 인라인 코드를 넘기는 command
|
||||
* @param string $binary 화이트리스트에 등재한 변형 표기
|
||||
* @param string $expectedReason 기대 거부 사유
|
||||
*
|
||||
* @scenario command_class=inline_code, enforcement_point=validator_unit
|
||||
*
|
||||
* @effects inline_code_flags_rejected
|
||||
*/
|
||||
#[Test]
|
||||
#[DataProvider('variantInterpreterShellCommandProvider')]
|
||||
public function it_classifies_variant_interpreter_names_before_gating(string $command, string $binary, string $expectedReason): void
|
||||
{
|
||||
$this->enableShell([$binary]);
|
||||
|
||||
$verdict = ScheduleCommandValidator::inspectShellCommand($command);
|
||||
|
||||
$this->assertFalse($verdict['allowed'], "변형 표기 인터프리터가 통과함: {$command}");
|
||||
$this->assertSame($expectedReason, $verdict['reason']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 변형 표기로 등재된 인터프리터의 절대경로 스크립트 실행은 그대로 통과한다 (과차단 회귀 가드).
|
||||
*
|
||||
* @scenario command_class=script_ok, enforcement_point=validator_unit
|
||||
*
|
||||
* @effects interpreter_script_files_still_run
|
||||
*/
|
||||
#[Test]
|
||||
public function it_allows_variant_named_interpreters_running_absolute_scripts(): void
|
||||
{
|
||||
$this->enableShell(['python.exe']);
|
||||
|
||||
$verdict = ScheduleCommandValidator::inspectShellCommand('python.exe /opt/scripts/job.py');
|
||||
|
||||
$this->assertTrue($verdict['allowed'], '변형 표기 인터프리터의 정상 스크립트 실행이 차단됨');
|
||||
$this->assertNull($verdict['reason']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 인터프리터 + 절대경로 스크립트 파일은 통과한다 (범용 크론 기능 회귀 가드).
|
||||
*
|
||||
@@ -917,6 +962,32 @@ class ScheduleCommandValidatorTest extends TestCase
|
||||
*
|
||||
* @return array<string, array{string}>
|
||||
*/
|
||||
/**
|
||||
* 변형 표기 인터프리터로 인라인 코드/감싼 명령을 넘기는 command 목록 (전부 차단).
|
||||
*
|
||||
* @return array<string, array{0: string, 1: string, 2: string}>
|
||||
*/
|
||||
public static function variantInterpreterShellCommandProvider(): array
|
||||
{
|
||||
return [
|
||||
'python.exe -c 코드 (Windows 확장자)' => [
|
||||
'python.exe -c import_os', 'python.exe', ScheduleCommandValidator::SHELL_REASON_INLINE_CODE,
|
||||
],
|
||||
'python3.12 -c 코드 (버전 접미사)' => [
|
||||
'python3.12 -c import_os', 'python3.12', ScheduleCommandValidator::SHELL_REASON_INLINE_CODE,
|
||||
],
|
||||
'php8.2 -r 코드 (버전 접미사)' => [
|
||||
'php8.2 -r phpinfo', 'php8.2', ScheduleCommandValidator::SHELL_REASON_INLINE_CODE,
|
||||
],
|
||||
'powershell.exe -Command (Windows 확장자)' => [
|
||||
'powershell.exe -Command Get-Process', 'powershell.exe', ScheduleCommandValidator::SHELL_REASON_INLINE_CODE,
|
||||
],
|
||||
'sudo.exe 감싼 명령 (거부형 + 확장자)' => [
|
||||
'sudo.exe /usr/bin/id', 'sudo.exe', ScheduleCommandValidator::SHELL_REASON_INTERPRETER,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function inlineCodeShellCommandProvider(): array
|
||||
{
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user