PHP2Shell 패치를 가로막는 삭제 API, 의존성 충돌, 누락 확장과 게이트웨이 오류를 구분하세요. 패치된 PHP로 서비스를 복구하고 두 CVE를 확인합니다.

01

mysql_*·each·create_function 없음

실패 요청의 PHP를 확인하세요. ext/mysql은 PHP 7, each()/create_function()은 PHP 8에서 삭제됩니다. 의존을 갱신하거나 비공개 사본에서 수정하세요. PDO/mysqli의 바인딩·트랜잭션을 유지하고 무작정 이름 교체나 불명 패치를 피합니다.

02

TypeError·메서드 서명 불일치

전체 오류·스택을 제한 로그에 보존합니다. 재정의 메서드를 부모·인터페이스·새 타입 규칙과 비교하세요. 패키지 갱신 또는 수정 뒤 시험합니다. 타입을 일괄 삭제하거나 상세 오류를 공개하지 마세요.

03

PHP 8.2 동적 속성 경고

폐기 경고만으로 RCE·침해를 증명하지 않습니다. 클래스를 찾아 유지 버전 또는 명시적 속성 수정으로 해결하고 직렬화·ORM을 시험합니다. 비공개 로그에 기록하며 원인을 제거하세요. 전체 오류 숨김은 PHP2Shell 수정이 아닙니다.

04

Composer 플랫폼 충돌

composer.json/lock을 보존하고 신뢰 사본에서 패키지와 check-platform-reqs --lock을 확인합니다. prohibits로 차단 패키지를 찾습니다. config.platform은 해석을 모사할 뿐 실제 PHP를 바꾸지 않습니다. --ignore-platform-reqs는 호환 증명이 아닙니다. 새 lock을 검토·시험하세요.

05

확장·PDO 드라이버 누락

CLI와 Web/FPM INI·모듈을 별도 비교합니다. PHP·아키텍처·NTS/ZTS에 맞는 신뢰 빌드를 올바른 서비스에 설치합니다. 워커를 계획적으로 재시작하고 함수·연결을 시험하세요. CLI만으로 Web을 보장하지 않습니다.

06

502·흰 화면·옛 PHP

upstream·FPM 시작·앱 로그를 대조합니다. 소켓·포트·권한·서비스·바이너리를 보세요. 비호환 확장이 시작을 막을 수 있습니다. 검증 뒤 제어된 reload를 하고 로그를 보존합니다. 502만으로 침해 증거가 되지 않습니다.

07

문자·링크·데이터 이상

소스 인코딩·DB charset/collation·내보내기·rewrite·경로를 별도 점검합니다. GBK/UTF-8 변환을 연습해 필드·첨부·URL을 비교하세요. 직렬화 값 일괄 치환을 피하고 원 URL 유지 또는 검증된 리다이렉트를 준비합니다.

PHP2Shell 패치 검증

앱 호환성, 유지보수 상태, PHP 보안은 별도로 확인합니다. 두 CVE 수정이 포함된 지원 중인 PHP를 선택하고 모든 Web 작업자, 예약 작업, 복제본을 검증하세요. 플러그인 업데이트만으로 PHP가 바뀌지 않습니다.

네 개의 브랜치. 명확한 업데이트 목표.
PHP 브랜치이 버전 미만의 업스트림최초 수정 버전보안 지원 종료
PHP 8.5< 8.5.12✓ 8.5.122029년 12월 31일
PHP 8.4< 8.4.27✓ 8.4.272028년 12월 31일
PHP 8.3< 8.3.36✓ 8.3.362027년 12월 31일
PHP 8.2< 8.2.35✓ 8.2.352026년 12월 31일
PHP 8.1 이하를 사용하시나요?

해당 브랜치의 일반 PHP 릴리스는 없습니다. 7.4, 8.0, 8.1의 최소 소스 백포트가 있으며 공급업체 지원은 별도로 확인해야 합니다. 가이드 읽기 ↗

원본 출처

PHP security team원본 출처 ↗CVE-2026-109618원본 출처 ↗CVE-2026-109619원본 출처 ↗PHP 7.0원본 출처 ↗PHP 8.0원본 출처 ↗PHP 8.2원본 출처 ↗PHP원본 출처 ↗Composer원본 출처 ↗
관리자 없는 PHP 사이트의 PHP2Shell 해결 ↗← 앱 가이드로 돌아가기