다음 코드에서 보안상 위험한 부분과 개선 방법은?
다음 코드에서 보안상 위험한 부분과 개선 방법은?
// 사용자가 요청한 파일 다운로드 기능
$filename = $_GET['file'];
echo readfile($filename);
정답: C
사용자 입력을 직접 파일 경로로 사용하는 것은 심각한 보안 취약점입니다.
⦁ 주요 보안 위험:
⦁ 경로 탐색 공격:
../../../etc/passwd
같은 입력⦁ 시스템 파일 접근: 중요한 설정 파일 노출
⦁ 임의 파일 다운로드: 의도하지 않은 파일 접근
⦁ 공격 시나리오 예시:
http://example.com/download.php?file=../../../etc/passwd
http://example.com/download.php?file=../config/database.php
⦁ 보안 개선 방안:
$filename = $_GET['file'];
// 1. 허용된 파일 확장자 검사
$allowed = ['txt', 'pdf', 'jpg', 'png'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if (!in_array(strtolower($ext), $allowed)) {
die('허용되지 않은 파일 형식입니다.');
}
// 2. 경로 탐색 문자 제거
$filename = basename($filename);
// 3. 지정된 디렉토리 내에서만 접근 허용
$filepath = 'uploads/' . $filename;
// 4. 파일 존재 확인
if (file_exists($filepath)) {
echo readfile($filepath);
}
💡 학습 팁
이 문제를 포함한 PHP 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.