경로 탐색

경로 탐색

설명

사용자 입력을 파일 경로로 사용하면 ../ 등을 통해 의도하지 않은 파일을 읽거나 쓸 수 있습니다.

잠재적 영향

민감 파일 노출, 임의 파일 삭제, 설정 파일 변조가 가능합니다.

해결 방법

파일명은 basename과 허용 목록으로 제한하고, 최종 경로가 기준 디렉터리 안에 있는지 검증합니다.

예시

허용 목록과 대상 파일은 서버가 관리하고, 공격자가 파일이나 심볼릭 링크를 바꾸지 못하도록 보호해야 합니다.

변경 전

php
<?php
$path = $_GET['file'];
readfile('/var/www/downloads/' . $path);

변경 후

php
<?php
$allowed = [
    'report.pdf' => '/var/www/downloads/report.pdf',
];

$file = $_GET['file'] ?? '';
if (!isset($allowed[$file])) {
    http_response_code(404);
    exit;
}

readfile($allowed[$file]);

설명:

  • 변경 전: 사용자가 제어하는 데이터가 파일 시스템 경로로 사용됩니다.
  • 변경 후: 사용자가 전달한 경로 문자열을 조합하지 않고 허용된 파일 키를 고정 경로에 매핑합니다.

참조