[10. 파일 업로드]

Minseok Jo·2026년 8월 27일

웹 시큐어코딩

목록 보기
10/11
post-thumbnail

웹취약점 점검에서 개발한 웹에 대하여 점검을 진행하였고, 여러 취약점들을 발견하였다.
발견한 취약점들을 대상으로 시큐어 코딩을 진행하고자 한다.

이번 대상은 주요정보통신기반시설 분석·평가 가이드 22번 항목 - 파일 업로드 이다.

파일 업로드 취약점이 발견된 항목은 다음과 같다.

URL파라미터메뉴
게시글 작성 Form URL
http://localhost/web/board/mem_write.php
게시글 저장 URL
http://localhost/web/board/memwrite_proc.php
파일 업로드 경로
http://localhost/web/uploads/
input_file회원게시판 >
게시글 작성


0. 파일 업로드 대응 방안

① 업로드 파일 검증

  • 허용된 확장자만 업로드할 수 있도록 WhiteList 방식으로 제한
  • MIME Type 및 실제 파일 내용을 함게 검증

② 파일 저장 방식

  • 업로드 파일을 웹 루트 경로 외부에 저장

③ 업로드 디렉토리 실행 권한 제거

  • 업로드 디렉토리에서 스크립트가 실행되지 않도록 웹 서버 설정

1. 시큐어 코딩

시큐어 코딩 - 디렉토리 인덱싱 에서 디렉토리 인덱싱 취약점을 보안조치 하였다.
따라서, 이후의 파일 업로드 취약점을 방어하기 위한 시큐어 코딩을 진행하였다.

[1. 업로드 파일 검증 - 확장자 제한]

[① 게시글 작성 페이지]

// memwrite_proc.php (일부)

$ext = pathinfo($file_name, PATHINFO_EXTENSION);

$allowed = ['jpg', 'jpeg', 'png', 'txt'];
if (!in_array($ext, $allowed, true)) {
    echo "<script>
        alert('허용되지 않은 파일 형식입니다.');
        history.go(-1);
    </script>";
    exit;
}

[② 게시글 수정 페이지]

// memedit_proc.php (일부)

$ext = pathinfo($file_name, PATHINFO_EXTENSION);

$allowed = ['jpg', 'jpeg', 'png', 'txt'];
if (!in_array($ext, $allowed, true)) {
    echo "<script>
        alert('허용되지 않은 파일 형식입니다.');
        history.go(-2);
    </script>";
    exit;
}
  • 업로드한 파일의 확장자가 허용된 확장자 목록 내에 있는지 확인하는 로직 추가



[2. 업로드 디렉토리 - 파일 실행 권한 제거]

파일 업로드 디렉토리의 .htaccess 설정

// .htaccess

<FilesMatch "\.(php|php3|php4|php5|phtml|phar)$">
    Require all denied
</FilesMatch>
  • PHP 등 서버측 스크립트 파일의 실행을 제한


2. 보안 조치 결과

① 파일 확장자 제한
▲ 허용되지 않은 파일 확장자의 경우, 게시글 첨부 불가



② 업로드 디렉토리 실행 권한 제거
▲ uploads 디렉토리 내에서, PHP 파일 실행 제한


0개의 댓글