sub_title
 PHP
제   목 PHP 파일 업로드 보안
작성자 사라마음 등록일 2008-08-02 16:29:42 조회수 8,359
PHP 파일 업로드 보안

출처: zetyx.com

파일 업로드를 할경우 php 관련 파일들은 서버에서 실행이 될 위험이 있습니다..
그래서 저같은 경우는 업로드 할 경우 tmp 안에 존재하는 파일을 제가 원하는 위치로
복사를 한후 삭제 합니다.. 복사할때 파일명을 변환하는데.. 우선 확장자는 있어야 합니다.. 왜 그런지는 모르겠지만 확장자가 없을경우 php파일은 그냥 읽히더군요...(저만 그런가요..?) 그래서 서버에서 인식할 수 없는 확장자명으로 바꿉니다.. 저는 down 이라고 써요.. 그리고 파일명이 겹칠 수도 있겠죠..?? 파일명을 현재시간으로 바꿉니다.. 그러니까 결국 파일명은 200001010345.down 이런식이 되겠죠..??^^ 그리고 원래 파일명은 따로 저장합니다.. 그리고 파일 다운로드를 시킬때는 header 함수를 이용해서 보냅니다.. 그럼 원래 파일명으로 변환하는게 가능하지요.. 아래 소스 참고하세요..

<?php
include "dbconn.php3";
mysql_query("update $table_name set downnum=downnum+1 where no=$no;",$connect);
// 다운로드 횟수 증가.
$down = mysql_fetch_array(mysql_query("select * from $table_name where no=$no;",$connect));
// 데이타를 가져옴.
$file_dir = "files";
//파일이 저장되어 있는 디렉토리.
$fp = fread(fopen("$file_dir/$down[filename]","r"),$down[filesize]);
// 서버상에 존재하는 파일을 엽니다.

// 아래부터는 HTTP header를 작성하는 부분입니다. Header에는 파일의 타입과 이름, 그리고 파일 크기가 포함됩니다.
header("Content-type:file/unknown");
//파일 타입이 file/unknown 일경우 무조건 다운로드
header("Content-length:$down[filesize]");
//파일의 크기
header("Content-Disposition:inline; filename=$down[realname]");
//파일 이름에 원래 realname 을 적어주면 다운로드시 그 이름으로 다운
echo($fp);
//파일의 실제 내용을 전송합니다.
?>
========================================================
한가지 문제가 있군요..

시간으로 할경우 동시에 2명이 접속해서 쓴다면..
하나의 파일은 사라져 버리지 않을까요 ?

이걸 조금더 보안하자면 시간_접소자ip.down 이런게 좋지 않을지..

 
0
    
 
0
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
30  PHP 함수 간단 정리   member 웹스톤 0 / 0 8308 2008-08-14
29  PHP 메일(mail) 함수를 이용한 첨부화일 전송하기 첨부파일   admin 웹마당넷 3 / 1 28211 2008-08-02
28  PHP 파일 업로드 보안   member 사라마음 0 / 0 8359 2008-08-02
27  PHP - 파일첨부가 가능한 폼메일러 LeoFormMailer 첨부파일   member 웹스톤 0 / 0 9411 2008-08-01
26  PHP - RSS 리더기   member 파도 0 / 1 8151 2008-07-29
25  PHP 숫자 천자리마다 콤마(쉼표) 찍기   member 높이뜬새 2 / 2 20084 2008-07-29
24  PHP 문자열 연결하기   member 높이뜬새 0 / 0 9405 2008-07-25
23  무조건 알아야 할 PHP 속도 테스트 14 가지   member 웹스톤 1 / 0 20634 2008-06-16
22  PHP 문자열중 숫자만 추출하기   member 높이뜬새 0 / 0 10291 2008-05-19
21  [설치/설정] 대용량 업로드...   member 컴퓨터존 0 / 0 7070 2008-05-02
20  [PHP] post, get, cookie, session 변수 확인   member 컴퓨터존 0 / 0 9828 2008-05-02
19  PHP Caching to speed up   member 컴퓨터존 0 / 0 7956 2008-05-02
18  PHP 현재 접속자 현황 보여주기   member 컴퓨터존 0 / 0 9246 2008-04-08
17  PHP 한글 레퍼런스   member 컴퓨터존 0 / 0 8574 2008-04-05
16  Flex와 PHP를 이용해서 만든 파일업로드 소스   member 오렌지 0 / 0 9101 2007-11-28
15  프레임(frame) 새로고침 할때 페이지 유지하기   member 웹스톤 0 / 0 10404 2007-11-15
14  [설치/설정] 대용량 업로드...   member 웹스톤 0 / 0 7553 2007-11-15
13  PHP에서 성능 개선을 위한 유용한 팁   member 웹스톤 0 / 0 10059 2007-11-15
12  PHP 버블소트 알고리즘   member 웹스톤 0 / 0 7115 2007-11-14
11  Oracle/PHP 환경의 트랜잭션 관리 이미지   member 웹돌이 0 / 0 45900 2007-10-09
10  FTP 서버 설치 및 관리   member 웹돌이 0 / 0 10030 2007-10-09
9  리눅스 ftp 명령어 모음   member 웹돌이 0 / 0 8002 2007-10-09
8  게시판검색이나 쇼핑몰에 유용한 자바스크립트   member 웹돌이 0 / 0 8245 2007-10-09
7  변수속도 테스트   member 웹돌이 0 / 0 6990 2007-10-09
6  PHP에서 접속자 IP 알아내기   member 높이뜬새 0 / 0 11208 2007-09-08
write
button [1] [2] [4] button