사용자 입력으로 파일 접근
왜 위험한가요
../ 같은 경로를 넣으면 의도한 폴더를 벗어나 설정 파일, 키, 소스 코드를 읽을 수 있습니다.
readfile('/var/files/' . $_GET['file']);
$base = realpath('/var/files');
$path = realpath($base . '/' . basename($_GET['file'] ?? ''));
if ($path === false || !str_starts_with($path, $base . '/')) {
http_response_code(404);
exit;
}
readfile($path);
해결 방법
basename()과 고정 폴더를 쓰고, realpath()로 그 폴더 안에 있는지 확인하세요.
내 코드 검사하기
내 코드 검사하기 →
파일을 붙여넣으면 이 규칙에 걸리는 줄을 모두 찾아드립니다.