Category :
ColdFusion
,
Railo
Comments :
댓글쓰기
Posted by
장창학
at
3:19 PM
가끔이기는 하지만 간혹 파일업로드가 가능한 게시판을 구축하여 운영하다보면 꼭 파일의 확장자를 강제로 바꾸어 업로드를 시도하는 분들이 있습니다. 가령 실제 파일은 delete.sh이나 delete.exe파일인데(둘다 각각 서버시스템에서 실행될수 있는 각별히 신경써야 하는 파일입니다.), 이를 탐색기에서 강제로 delete.jpg파일로 변경해서 마치 이미지 파일인것 처럼 위장해 개발자가 쳐놓은 보안장벽인 "업로드 파일 확장자필터링"를 우회하여 업로드하게 됩니다. 물론 대부분의 시스템은 JPG파일를 일반 바이너리 실행파일로 구동되지 않지만 일단 시스템의 취약점을 이용해서 충분히 시스템 전체를 포맷해 버리는 최악의 상황을 연출할 수 있고, 또 그런 보고도 많이 있습니다.
ColdFusion 8 또는 Railo 3이상부터는 IsImageFile()함수를 지원하고 있는데, 이는 서버상의 어떤 파일이 실제로 이미지 파일인지 아닌지 확인해주는 함수입니다. 가령 업로드를 구현할때 위에서처럼 delete.jpg파일이 실제 이미지 파일이 아닌 경우 false를 반환하게 됩니다. 다음의 예를 확인해 보겠습니다. 다음의 예는 어떤 디렉토리내의 파일을 조사하여 이미지 파일인지 아닌지 확인하는 것인데, jpg와 같이 확장자만 보고 이미지 파일인지 아닌지 조사하는 것이 아니라, 맨마지막의 파일의 예처럼 실제 이미지 파일이 아닌데(sample.doc) 마치 이미지 파일처럼(sample1.jpg) 확장자가 바뀌어 있는 경우 이미지파일이 아니라고 false를 반환하는 예입니다.
Demo view : http://www.nooree.com/samples/railogetfileinfo/
<cfdirectory action="LIST" name="Files" directory="#ExpandPath('./')#" filter="*.*" sort="Type ACS, Name ASC">
<cfoutput query="Files">
#name# <br />
<cfdump var="#IsImageFile("#name#")#">
<br />
</cfoutput>

|


ColdFusion (73)
Comments