파일 다운로드시 보안적용

 

파일 다운로드시 보안적용하여 다운로드 하기입니다.

 

업로드시 파일명을 변경하여 임의의 파일로 저장하고 다운로드시에는 다시 업로드시 파일명으로 변경하여 다운로드 하게 됩니다.

다운로드 파일을 사용하기 위해서는 업로드시에 파일은 임의의 파일명으로 변경해서 저장하고, 실제 파일명과 함께 디비에 저장합니다. 그리고, 다운로드 할때는 실제파일명과 저장된 파일명을 함께 사용하여 다운로드 합니다.

 

다운로드 파일 링크주소는 http://도메인/lownload.php?tmp_name=저장된파일명&name=실제파일명 가 됩니다.

 

download.php 파일은 아래와 같습니다.

<?
ini_set('memory_limit', '5120M'); // 큰용량 파일 다운로드시 적용
set_time_limit ( 0 );

 

$_file_dir="파일저장된 곳 경로"; // 경로끝에 / 붙여주세요.


// 파일명 보안 조치
function basename_fix($filename)
{
 return preg_replace('/^.+[\\\\\\/]/', '', $filename);
} // function()
$_GET['tmp_name'] = basename_fix(stripslashes($_GET['tmp_name'])); // 실제저장된 파일명
$_GET['name'] = basename_fix(stripslashes($_GET['name'])); // 업로드시 파일명


// 파일 존재여부, 읽기 가능한지 검사
$file = $_file_dir.DIRECTORY_SEPARATOR.$_GET['tmp_name'];
if (!file_exists($file))
{
 ?>
  <script type="text/javascript">
   <!--
    alert("서버에 파일이 존재하지 않습니다.");
     //-->
  </script>
 <?
} else if (!is_readable($file))
{
 ?>
  <script type="text/javascript">
   <!--
    alert("서버에서 파일의 읽기권한이 없습니다.");
     //-->
  </script>
 <?
} else
{
 $file_size = filesize($file);
 $fp = fopen($file,"r");
 $contents = fread($fp,$file_size);
 fclose($fp);

 if (!function_exists('mime_content_type_simple')) {
    function mime_content_type_simple($filename) {
     $idx = strtolower(end( explode( '.', $filename )) );
     $mimet = array(   
      'ai' =>'application/postscript',
      'aif' =>'audio/x-aiff',
      'aifc' =>'audio/x-aiff',
      'xyz' =>'chemical/x-xyz',
      'zip' =>'application/zip',
      'xls' =>'application/vnd.ms-excel',
      'ppt' =>'application/mspowerpoint',
      'doc' =>'application/msword',
      'htm' =>'text/html',
      'html' =>'text/html',
      'eml' =>'message/rfc822',
      'txt' =>'text/plain',
      'pdf' =>'application/pdf',
      'jpg' =>'image/jpeg',
      'gif' =>'image/gif',
      'png' =>'image/png',
      'dwg' =>'application/acad',
      'dxf' =>'application/dxf'
     );

     if (isset( $mimet[$idx] )) {
      return $mimet[$idx];
     } else {
      return 'application/octet-stream';
     }
    }
 }
 $c_type = mime_content_type_simple($_GET['name']);

 if (strstr($_SERVER['HTTP_USER_AGENT'],"MSIE") && strtolower($__NFUpload['charset']) == 'utf-8')
 {
  $_GET['name'] = iconv('utf-8//IGNORE', 'cp949', $_GET['name']);
 } else if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)
 {
  $_GET['name'] = str_replace(";", "%3B", $_GET['name']);
 } // if() 

 $mtime = filemtime($file);
 if (!$mtime)
  $mtime = time();
 header('Last-Modified: '.date('r', $mtime));

 if ( strstr($_SERVER['HTTP_USER_AGENT'],"MSIE 5.5"))
 {
  header("Content-Type: doesn/matter\r\n");
  header("Content-Disposition: filename=\"".$_GET['name']."\"\r\n\r\n");
  header("Content-Length: ".$file_size."\r\n");
  header("Content-Transfer-Encoding: binary\r\n");
 }else
 {
  header("Content-Type: $c_type\r\n");
  header("Content-Disposition: attachment; filename=\"".$_GET['name']."\"\r\n\r\n");
  header("Content-Length: ".$file_size."\r\n");
  header("Content-Transfer-Encoding: binary\r\n");
 } // if()

 echo $contents;

} // if()

?> 

'PHP프로그래밍' 카테고리의 다른 글

내 마이피플 키값 알아내기  (0) 2012.05.03
마이피플로 메세지 보내기  (0) 2012.05.03
쿠키 header 에러 없이 굽기 함수  (0) 2012.05.03

내 마이피플 키값 알아내기

 

본인의 마이피플 키값은 마이피플 위젯페이지에서 구할 수 있습니다.

 

마이피플 위젯 : http://widgetbank.daum.net/widget/view/966

 

 

html소스를 선택하고 '퍼가기' 버튼을 클릭하면 다음과 같은 창이 뜹니다.

 

 

 

소스를 메모장에 복사해 넣고 본인의 마이피플 키값을 구합니다.

 

...up_mypeople_key=마이피플키값&up_display_name...

 

'PHP프로그래밍' 카테고리의 다른 글

파일 다운로드시 보안적용  (0) 2012.05.04
마이피플로 메세지 보내기  (0) 2012.05.03
쿠키 header 에러 없이 굽기 함수  (0) 2012.05.03

마이피플로 메세지 보내기

 

마이피플은 다음에서 배포하는 소셜프로그램입니다.

카카오톡등 많은 앱들이 있지만 마이피플이 좋은점은 스마트폰용과 pc용 두가지 모두 지원한다는 것입니다.

물론 pc용은 음성통화등은 지원하지 않지만 다음메일, 위젯메세지, 쪽지등을 실시간으로 알려주니

잘 이용하면 좋은 프로그램이 될 것입니다.

 

 

마이피플로 메세지 전송하는 함수를 소개하겠습니다.

해당 함수를 운영하는 사이트에 적용하면 글들을 전송할수도 있고, 쇼핑몰은 주문알림등을 보낼수 있습니다.

 

// 마이피플 위젯메세지 보내는 함수 

function MyPeople_send($key='', $from, $msg) {
 if($key=='') $key= '기본마이피플키';
 $msg = urlencode($msg);

 $url="http://air21.daum.net/air21/widget/sendMessage.daum";
 $t_data="key=".$key."&content=".$msg."&from=".$from;
 $result=trans_sock($url, $t_data);
}

 

// 웹소켓으로 값을

function trans_sock($url, $t_data) {
$uinfo = parse_url($url);
if($uinfo[query]) $t_data .= "&".$uinfo[query];
if(!$uinfo[port]) $uinfo[port] = "80";

//최종 전송 자료
$send_str = "POST ".$uinfo[path]." HTTP/1.1\r\n".
"Host: 80\r\n".
"User-Agent: MTools\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-length: ".strlen($t_data)."\r\n".
"Connection: close\r\n\r\n".
$t_data;

//전송
$fp = fsockopen($uinfo[host],$uinfo[port]);
fputs($fp,$send_str);

//응답 받음
while(!feof($fp)) $response .= fgets($fp,128);
fclose($fp);
$value=explode("[[",$response);
$value=explode("]]",$value[1]);

return $value[0];
}

 

 

사용법은 아래소스를 원하는 페이지에 삽입하면 됩니다.

마이피플 키값 구하는 방법은 다음 글에서 소개하겠습니다.

보내는 사람 핸드폰번호는 임의로 넣어도 되고, 실제 마이피플을 사용중인 핸드폰번호를 넣어주면

스마트폰 마이피플앱에서 답글이 가능합니다.

$key="전송받을 사람의 마이피플 키값";

$from="보내는사람 핸드폰번호";

$msg="전송되는 메세지";

 

MyPeople_send($key, $from, $msg) ;

'PHP프로그래밍' 카테고리의 다른 글

파일 다운로드시 보안적용  (0) 2012.05.04
내 마이피플 키값 알아내기  (0) 2012.05.03
쿠키 header 에러 없이 굽기 함수  (0) 2012.05.03

쿠키 header 에러 없이 굽기 함수

 

cookie는 페이지의 맨처음에 와야 생성이 됩니다.

다른 html내용 아래에서는 cookie 생성시 header 에러가 납니다.

가끔 작업하다가 보면 부득이하게 cookie를 다른 내용 아래에서 생성해야 할경우가 있는데요.

 

아래 함수는 header 에러를 피하면서 cookie를 생성하는 함수입니다.

function bdz_setcookie($name, $value, $expire, $path='/')
{
if (headers_sent()) {
$cookie = $name.'='.urlencode($value).';';
if ($expire) $cookie .= ' expires='.gmdate('D, d M Y H:i:s', $expire).' GMT';
echo '<script language="javascript">document.cookie!="'.$cookie.'";</script>';
} else {
setcookie($name, $value, $expire, $path);
}

}

 

 

또 한가지 방법으로는 ajax로 cookie 생성하는 파일을 불러오는 방법이 있습니다.

'PHP프로그래밍' 카테고리의 다른 글

파일 다운로드시 보안적용  (0) 2012.05.04
내 마이피플 키값 알아내기  (0) 2012.05.03
마이피플로 메세지 보내기  (0) 2012.05.03
◀ PREV 1 NEXT ▶