|
php에서 linux 서버로 파일을 업로드 할때 확장자 중 php나 html 파일을 업로드하면 발생하는 문제점입니다. ex) 대부분 db 파일은 /cofig 폴더나 /lib 폴더에 저장하고 사용합니다. db 접속 파일명은 dbconn.php 나 dbconn.inc 파일로 저장하죠 예전에 나온 책들(요즘도 그러는지는 모르겠습니다) 대부분을 보면 db 접속 파일 확장자명을 inc 로 지정해 놓더군요. 그래서 아파치에서 설정파일에서 AddType application/x-httpd-php 라인에 .inc 를 등록하지 않았을 경우 브라우저에서 해당 폴더나 구글에서 검색하면 db 접속 정보를 쉽게 빼낼수가 있었습니다. 다시 본론으로 들어가서.. 먼저 업로드 할 php 파일명입니다. upload.php <?php echo "DBID : " $dbid . $dbID. $dbId. $dbUser ; //... 이것도 유추할 수 있는 문장을 쭈욱 적습니다. 이 파일을 게시판등의 업로드 프로그램을 실행시켜 업로드가 되면 파일이 어디에 저장되어 있는지 알수가 있죠. 이 주소로 접속을 하게 되면 DB ID와 패스워드를 알아 낼수가 있습니다. 이 방법으로 system("cat /etc/password"); 명령을 실행하여 패스워드나 세션내용 조작도 가능합니다. 그래서 파일 허용 확장자가 중요한 거구요. 굳이 확장자 상관없이 모든 파일의 업로드를 하도록 해야 겠다면.. 파일확장자와 파일명을 아예 바꾸는 방법도 좋습니다.(제가 선호하는 방법입니다) move_uploaded_file($_FILES[upFile][tmp_name], "./data/". uniqid(""));
와 같이 변경하고 원래 파일명은 DB에 저장해 놓는 방식입니다. 해서 내가 올린 파일이 어떤 파일인지 알기도 힘들 뿐더러, 안다해도 확장자가 없기 때문에 해당 코드가 실행되지 않습니다. |
|
댓글을 달아 주세요