
웹취약점 점검에서 개발한 웹에 대하여 점검을 진행하였고, 여러 취약점들을 발견하였다.
발견한 취약점들을 대상으로 시큐어 코딩을 진행하고자 한다.
이번 대상은 주요정보통신기반시설 분석·평가 가이드 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 | 회원게시판 > 게시글 작성 |
① 업로드 파일 검증
② 파일 저장 방식
③ 업로드 디렉토리 실행 권한 제거
시큐어 코딩 - 디렉토리 인덱싱 에서 디렉토리 인덱싱 취약점을 보안조치 하였다.
따라서, 이후의 파일 업로드 취약점을 방어하기 위한 시큐어 코딩을 진행하였다.
[① 게시글 작성 페이지]
// 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;
}
파일 업로드 디렉토리의 .htaccess 설정
// .htaccess
<FilesMatch "\.(php|php3|php4|php5|phtml|phar)$">
Require all denied
</FilesMatch>
| ① 파일 확장자 제한 |
|---|
![]() |
| ▲ 허용되지 않은 파일 확장자의 경우, 게시글 첨부 불가 |
| ② 업로드 디렉토리 실행 권한 제거 |
|---|
![]() |
| ▲ uploads 디렉토리 내에서, PHP 파일 실행 제한 |