[ASP 파일 확장자 제한하기]
업로드 파일의 확장자 제한은 보안상의 이유로 반드시 처리 해줘야 하는 부분이며, 처리 방법도 아주 쉽습니다. 파일명에서 확장자만 분리한 후 허용되는 확장자 타입과 비교해서 아닐경우 업로드 되지않게 처리해 주시면 끝입니다.
파일명에서 확장자만 분리하거나, 파일전체 경로에서 파일명만 분리하기 위해서는 InstrRev 함수를 사용하면 편리합니다. 확장자만 구해오기 위해서는 right 함수를 이용해서 뒤에서 3개의 문자만 잘라오는 방법을 사용할 수도 있지만 파일전체 경로에서 파일명만 분리해 오기 위해서는 InstrRev 함수를 사용하는 것이 제 격입니다. (※도스(dos)처럼 파일명이 8.3으로 픽스된 것이 아니기 때문에 뒤에서 3개의 문자를 확장자라 단정 지을수 없습니다.)
InstrRev(문자열1, 문자열2)
InstrRev 함수는 문자열1에서 문자열2가 포함되는 마지막 위치를 반환합니다. 없을 때에는 0을 반환 합니다.
1. 파일명에서 확장자 분리하기
fileType = Mid(fileName, InStrRev(fileName, ".") + 1)
위의 코드는 fileName이라는 파일명을 담고 있는 변수에서 확장자만 분리하여 fileType 변수에 저장하는 코드입니다. 쉽게 말해서 파일명에서 확장자만 분리해 filtType 변수에 저장하는 코드로 결과는 아래와 같이 fileType에 fileName의 확장자만 저장됩니다.
fileName = "test.asp" fileType = "asp"
2. 파일전체 경로에서 화일명만 분리하기
fileName = Mid(filePath, InstrRev(filePath, "\")+1)
위의 코드는 filePath에서 파일명만 분리해서 fileName에 저장하게 됩니다. 결과는 아래와 같이 파일전체 경로에서 파일명만 분리되서 fileName 변수에 저장됩니다.
filePath = "c:\inetpub\testsite\test.asp" fileName = "test.asp"
파일명에서 파일 확장자를 분리하는 것이 걸어가다 껌하나 꺼내 씹는 것보다 쉽다는 것을 알았으니 본격적으로 업로드된 파일 확장자를 제한하는 코드를 작성해 보겠습니다.
우리는 웹서버에 업로드될 경우 고약한 코드를 실행할 수 있는 asp, php, jsp, aspx, cgi, exe 파일의 확장자를 제한하는 예제를 만들어 보겠습니다.
가장 쉬운 코드는 If문을 이용해서 제한할려는 확장자와 하나하나 직접 비교하는 방법이겠지만 이 방법은 너무 유치하다고 느껴질수도 있습니다.
※ split 함수를 이용하는 방법
<%
fileName = "test.asp" fileType = Mid(fileName, InStrRev(fileName, ".") + 1)
notUpType = "asp,php,jsp,aspx,cgi,exe" '업로드가 허용 안돼는 파일타입
arrFileType = Split( notUpType, "," ) 'Split함수를 이용해 문자열을 구분자로 분리해 배열에 담습니다.
For i = 0 To Ubound(arrFileType) If UCase(fileType) = UCase(arrFileType(i)) Then 'UCase함수를 이용해 대분자로 변환해서 비교합니다. notUpChk = True End If Next
If notUpChk = True Then Response.Write"<font color='#FF0000'>업로드할 수 없는 파일입니다.</font>" Response.end Else Response.Write"업로드할 수 있는 파일입니다." End If
%> | |
※ 정규식을 이용하는 방법
정규식을 이용하는 방법에서 우리는 아래와 같은 정규표현식을 이용해서 파일의 확장자를 제한할 것입니다. ^(asp|php|jsp|aspx|cgi|exe)$
위의 정규 표현식을 간단하게 설명드리자면
'^' 는 뒤의 문자열로 시작한는 모든 문자열 가르킵니다. '()'는 안에 있는 문자열을 그룹화 합니다. '|' 는 OR 연산자로 asp|php 라고하면 asp나 php를 포함하는 문자열을 의미합니다. '$' 는 문자열의 마지막을 가리키며, 그 뒤의 문자열은 더 이상 포함되지 않습니다.
<%
fileName = "test.asp" fileType = Mid(fileName, InStrRev(fileName, ".") + 1)
notUpType = "^(asp|php|jsp|aspx|cgi|exe)$" '업로드가 허용 안돼는 파일타입의 정규표현식
patternStr = notUpType Set re = New RegExp 'RegExp 객체를 생성합니다. re.Pattern = patternStr re.IgnoreCase = true '대소문자 구분을 하지 않도록 합니다. re.Global = True '전체 문자열을 검색합니다.
notUpChk = re.test(fileType)
If notUpChk = True Then Response.Write"<font color='#FF0000'>업로드할 수 없는 파일입니다.</font>" Response.end Else Response.Write"업로드할 수 있는 파일입니다." End If
%>
| |
위의 파일 확장자를 제한하기 위한 너덜너덜한 예제는 함수로 만들어 사용하시면 더욱 효율적이고 좋습니다. 함수로 한번 만들어 보시기 바랍니다.
자바스크립트를 이용한 파일 확장자 제한하기 #1
자바스크립트를 이용한 파일 확장자 제한하기 #2
|