RadarURL

웹 프로그래밍
2011.09.22 23:14

외부 링크 방지

조회 수 8766 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

개인 계정에서 블로그등의 사이트를 운영하시는 분들 중 가끔 외부에서의 컨텐츠 직링크로 인해 트래픽 초과에 걸리시는 분들이 많습니다. 트래픽 문제가 아니더라도, 무단 링크로 인해 저작권을 침해받는 경우도 있겠죠.
이를 해결하기 위해 레퍼러비교 같은 방법도 쓰곤 하는데, 아마 .htaccess 파일을 이용한 것도 많이들 아실 겁니다.

간단히, .htaccess와 워터마킹 기술을 이용해 이미지 링크 제어를 하는 법을 소개합니다.

일단, 이미지들이 저장되는 디렉토리에 .htaccess파일을 만듭니다. (이미 존재한다면 아래의 소스를 마지막에 추가하시면 됩니다.)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !explug\.com [NC]
RewriteCond %{HTTP_REFERER} !eouia0\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteRule (.*) image.php?image=$1

...........
잠깐 설명을 하자면,

RewriteCond %{HTTP_REFERER} !explug\.com [NC]
RewriteCond %{HTTP_REFERER} !eouia0\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]

이 부분에 링크를 허용할 URL들을 기재합니다. 정규식 패턴이므로 잘 알아서.. :)
위의 예의 경우 explug.com, eouia0가 포함되는 사이트, google 등에 링크를 허용한 경우입니다. 이 경우에는 원본 이미지를 마음대로 가져다 쓸 수 있습니다.
그외의 URL에서 링크가 걸릴 경우에는

RewriteRule (.*) image.php?image=$1

에 따라, image.php?image=파일이름 으로 리다이렉트됩니다. 만약 그냥 링크 자체를 끊고 싶으시다면 여기에 아무거나 써주셔도 되지요.

이제 워터마킹 처리를 위해 image.php를 작성합니다. GD라이브러리를 사용했으므로 GD가 사용가능한 계정이어야 합니다.

<?
define ("WATERMARK", "watermark.jpg");

header("Content-type: image/jpeg");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

$pic = strip_tags( $_GET['image'] );

$image_url = urldecode($pic);

if (!@fopen($image_url, "r")) {
   $dst_img = imagecreatefromjpeg(WATERMARK);
   $res = imagejpeg($dst_img, "", 100);
   die();
}

$file = pathinfo($image_url);
switch(strtoupper($file["extension"])) {
   case "JPG":
       $src_img = imagecreatefromjpeg($image_url);
       break;
   case "GIF":
       $src_img = imagecreatefromgif($image_url);
       break;
   case "PNG":
       $src_img = imagecreatefrompng($image_url);
       break;
}

$src_w = imagesx($src_img);
$src_h = imagesy($src_img);

$portion = $src_h / $src_w;
$dest_w = 300;
$dest_h = round($dest_w * $portion);

$dst_img = imagecreatetruecolor($dest_w, $dest_h);
imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $dest_w, $dest_h, $src_w, $src_h);

$watermark = imagecreatefromjpeg(WATERMARK);

$watermark_w = imagesx($watermark);
$watermark_h = imagesy($watermark);

$overlay_img = imagecreatetruecolor($watermark_w, $watermark_h);
imagecopy($overlay_img, $watermark, 0,0,0,0, $watermark_w, $watermark_h);
imagedestroy($watermark);

$white  = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
imagecolortransparent($overlay_img, $white);

$offsetX = $dest_w - $watermark_w - 3;
$offsetY = $dest_h - $watermark_h - 3;

imagecopymerge($dst_img,$overlay_img,$offsetX,$offsetY,0,0,$watermark_w,$watermark_h, 100);
imagedestroy($overlay_img);

$res = imagejpeg($dst_img, "", 100);
imagedestroy($dst_img);
?>

<VirtualHost *:80>
    DocumentRoot ...
    ServerName sir.co.kr
    ServerAlias www.sir.co.kr wwww.sir.co.kr ww.sir.co.kr
    #  외부링크방지
    SetEnvIfNoCase Referer sir\.co\.kr link_allow
    SetEnvIfNoCase Referer www\.sir\.co\.kr link_allow
    SetEnvIfNoCase Referer ^$ link_allow
    <FilesMatch
"\.(jpe?g|gif|png|bmp|avi|swf|mpe?g|zip|z[00-99]|rar|mp[1-9]|arj|exe|asf|wm[a-z]*|ra[a-z]*|alz|ZIP|Z[00-99])$">
        Order Deny,Allow
        Allow from env=link_allow
        Deny from all
    </FilesMatch>
</VirtualHost>

 

출처 : http://blog.ohmynews.com/hjlee222/185568

?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 927567
726 u-E(법,정책) 법률의 적용의 우선순위 JaeSoo 2011.10.26 8285
725 소프트웨어 VirtualDub h.264 편집 virtualdub mod , x264vfw, lame mp3 file JaeSoo 2011.10.19 8785
724 기타 직종에 따른 면접 스타일링 팁 file JaeSoo 2011.10.14 6303
723 건강 암종류별 병원 순위 및 암수술 명의 file JaeSoo 2011.10.13 7754
722 윈도우즈 윈도우 인증 A.I & K.J 20110627 & 자동인증소스 10.27 버전 JaeSoo 2011.10.09 22332
721 웹 프로그래밍 제로보드 XE statistics 모듈 접속 통계 수치가 똑같이 올라가는 버그 해결 방법 JaeSoo 2011.10.08 9873
720 네트워크 무선랜 WPA-PSK와 WPA2-PSK 방식에서 TKIP와 AES 암호화 방식 사용의 혼동 JaeSoo 2011.10.08 18844
719 네트워크 ipTIME 무선랜 WPA-PSK (AES) 암호화 설정 방법 및 동작 원리 JaeSoo 2011.10.08 18619
718 윈도우즈 무단복사 금지(오른쪽 마우스 클릭 금지) 해제 방법, 소스보기 기능 JaeSoo 2011.10.07 13713
717 웹 프로그래밍 제로보드 XE rewrite mod (짧은주소) 사용시 게시판 이름 안붙게 하는 방법 JaeSoo 2011.10.04 10450
716 윈도우즈 32비트 운영체제에서 4GB 이상의 램 사용을 위한 램디스크 설치와 활용 JaeSoo 2011.10.04 11513
715 하드웨어 [Raid] 레이드의 환상을 버려라 - 레이드 잡설 JaeSoo 2011.09.23 7946
» 웹 프로그래밍 외부 링크 방지 JaeSoo 2011.09.22 8766
713 웹 프로그래밍 불법웹(이미지) 링크 차단에 대한 설정법 JaeSoo 2011.09.22 9343
712 하드웨어 보다 향상된 RAID 기능 JaeSoo 2011.09.22 7954
711 하드웨어 Online Capacity Expansion (OCE, 온라인 용량 확장), Online RAID Level Migration (ORLM, 온라인 RAID 레벨 변경) 1 JaeSoo 2011.09.22 8786
710 하드웨어 레이드 ( RAID ) 의 레벨과 구성 ( 2부 : Raid Level 5, 6, 10, 50, 60 ) file JaeSoo 2011.09.20 10405
709 하드웨어 레이드 ( RAID ) 의 레벨과 구성 ( 1부 : Raid Level 0,1,2,3,4 ) file JaeSoo 2011.09.20 13480
708 하드웨어 Dell PowerEdge RAID 컨트롤러 (PERC) H700 및 H800 사용 설명서 JaeSoo 2011.09.20 7940
707 하드웨어 Dell™ PowerEdge 확장가능 RAID 컨트롤러 4/Di PERC4/Di 사용자 설명서 JaeSoo 2011.09.20 6158
Board Pagination Prev 1 ... 83 84 85 86 87 88 89 90 91 92 ... 124 Next
/ 124


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너