설명
검증되지 않은 사용자 입력이 include 또는 require 경로로 사용되면 파일 노출이나 의도하지 않은 PHP 코드 실행으로 이어질 수 있습니다. 포함 가능한 파일과 영향은 파일 권한 및 원격 파일 포함 설정 등에 따라 달라집니다.
잠재적 영향
민감 파일 노출, 인증 우회, 임의 PHP 코드 실행이 가능합니다.
해결 방법
포함 가능한 파일을 키 기반 허용 목록으로 고정하고, 사용자 입력을 경로 문자열로 직접 사용하지 않습니다.
예시
변경 전
php
<?php
$file = $_GET['page'];
include($file);
변경 후
php
<?php
$pages = [
'home' => __DIR__ . '/pages/home.php',
'help' => __DIR__ . '/pages/help.php',
];
$page = $_GET['page'] ?? 'home';
if (!isset($pages[$page])) {
http_response_code(404);
exit;
}
include $pages[$page];
설명:
- 변경 전: 사용자가 제어하는 데이터가 include 또는 require에 도달하여 로컬 파일이 노출되거나 의도하지 않은 PHP 코드가 실행될 수 있습니다.
- 변경 후: 포함 가능한 파일을 키 기반 허용 목록으로 고정하고, 사용자 입력을 경로 문자열로 직접 사용하지 않습니다.