RadarURL

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기 인쇄
[서버운영] .htaccess와 워터마킹을 이용한 이미지 링크 방지

[원문]http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=39686&sca=&sfl=wr_subject%7C%7Cwr_content&stx=RewriteRule&sop=and




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

실행예는 링크를 보시면 이해하실 수 있을 겁니다. 링크를 허용한 사이트에서는 원본이, 링크를 허용하지 않은 사이트에서는 image.php에 의해 워터마크처리된 이미지로 링크가 걸리게 됩니다. 여기에서는 예를 위해 워터마킹 처리된 이미지의 사이즈를 가로 300으로 고정시켰지만 이 부분은 적당히 소스를 고치시면 원하는 대로 적용시키실 수 있으실 겁니다.

 

출처 : http://renstyle.com/blog/category/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C?page=4

?

공부 게시판

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

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 2007575
351 응용 프로그래밍 완벽한 웨딩드레스 핏의 비밀, 웨딩누브라 new 힘겨운암석76 2026.10.05 1
350 응용 프로그래밍 골든타워 010 2817 0845 골타문의 편하게 알아보는 셔츠룸 new 속삭이는미노타우르93 2026.10.05 2
349 웹 프로그래밍 양산싱크대막힘? 뚫자하수구로 해결! 깊은우동그릇23 2026.10.04 2
348 응용 프로그래밍 강남하이퍼블릭 강남일프로 강남텐프로 강남텐카페 강남쩜오 강남셔츠룸 강남레깅스룸 수수한환영74 2026.10.03 15
347 응용 프로그래밍 텔ㄹH그램 :@holysim선불유심내구제 대포유심삽니다 신불급전 대출연체자 비상금대출 급전선불 선불유심매입 대포유심파는법 텔레그램:@holysim 선불유심판매 선불유심매입업체 소액대출 간편무서류대출 정식내구제업체 강철의기사22 2026.10.03 7
346 응용 프로그래밍 WIndows Application의 실행 속도 측정 file YooN 2023.09.06 6479
345 웹 프로그래밍 메모리 부족 현상 (allowed memory size of 134217728 bytes..) YooN 2023.08.01 5949
344 웹 프로그래밍 Guzzle - cURL error 60: SSL certificate problem: unable to get local issuer certificate 문제 해결 file YooN 2023.07.30 6119
343 웹 프로그래밍 XE 캐시파일 재성생후 404 Oops, Sorry. Page is not found! 나올때 YooN 2023.07.29 5941
342 응용 프로그래밍 [Apple] 엔터프라이즈 계정신청 (Enterprise Program) file YooN 2023.03.27 4186
341 웹 프로그래밍 XE - " Fatal error: Class 'Object' not found in " / class 낫파운드 오류 file YooN 2023.03.20 3871
340 응용 프로그래밍 [MSA] MSA란 무엇인가? 개념 이해하기 file YooN 2023.01.26 3638
339 웹 프로그래밍 iOS 앱 개발을 위한 인증서 생성 및 관리 file YooN 2023.01.18 4178
338 프로그래밍 [ iOS ] 앱 스토어 개인, 회사, 엔터프라이즈 차이점 file YooN 2023.01.09 3041
337 웹 프로그래밍 PHP 파서 이해하기 (<?php의 php를 생략하고 간단히 <? 태그 와 ?> 태그를 사용하는 방법) YooN 2016.08.10 6270
336 프로그래밍 SVN의 cleanup 에러시 해결방법 YooN 2016.05.05 4334
335 프로그래밍 [오류해결] svn cleanup failed-previous operation has not finished; run cleanup if it was interrupted file YooN 2016.05.05 4383
334 프로그래밍 TortoiseSVN 계정변경 file YooN 2016.05.05 3157
333 프로그래밍 SVN passwd 설정 : 계정 (users/passwd) file YooN 2016.05.04 4184
332 웹 프로그래밍 XE 비회원 글쓰기 항목 지우기 file YooN 2016.04.28 4760
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 18 Next
/ 18


즐겨찾기 (가족)

JAESOO's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

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

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

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

JServer.kr

제이서버 메타블로그

재수 티스토리


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

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너