Very interesting things  Blog RSS Feed

Protect photos with PHP and .htaccessApril 14 2008

Protect photos with PHP and .htaccessFor sometime now I was looking for a way to protect my photos from been downloaded from my site without my permission. I also wanted to make sure that no images from this site would be hot linked.

There are several methods that can be used to accomplice that. Some people suggest using javascript to disable right clicking of course this is absolutely useless for anyone that has the slightest knowledge of web design as it's very easy to copy the image url from the document source. Others suggest resizing images small enough so they won't be worth copying but again this is no good when have a web gallery showcasing your photos.

The solution to this issue comes by apache and php. Using .htaccess we can disallow access to any folders and prevent hot linking while with php we can easily create a script that resizes the photos and adds a watermark.

Apache .htaccess
This is the easy part:

# Enable mod_rewrite, start rewrite engine 
Options +FollowSymLinks 

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)? [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ [NC,R,L]

We create a file called .htaccess it is very important to add the dot in the beginning and place it on the root of our site. First we enable the Apache rewrite engine and then we use two different lines of code.

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)? [NC]

This tells Apache which is our domain and that it should allow photos to be displayed if the referrer is this domain.

RewriteRule \.(jpg|jpeg|png|gif)$ [NC,R,L]

The second line says that if anyone requests any image type file but the referrer is not our website then display a small image called forbid.jpg instead of the original image

That's it really no one can access our photos by typing the url on the browser and no one can hot link our photos on their website.

PHP watermark.php
This is a simple php script which takes an image and places another image on top of it as a watermark. The good thing with it is that we can upload our original photos on the server unmodified and the server will do all the work for us.
header("Content-type: image/jpeg");

    $source = imagecreatefromjpeg($src);

$watermark = @imagecreatefrompng('watermark.png');
$watermarkwidth =  imagesx($watermark);
$watermarkheight =  imagesy($watermark);
imagecopy($source, $watermark,  0, 0, 0, 0, $watermarkwidth, $watermarkheight);

The script calculates the with and height of our photo and then calculates the width and height of our watermark. Finally creates a new image by combining the 2 photos. In my case the watemark is my website name but it could be some lines or any other pattern that would prevent someone from copying the photo.

In our html we place a simple image tag with source: 


but we replace the link to the image with the watermark.php and the directory of the photo.

With this simple script our photos will be watermarked and because of the .htaccess configuration nobody can access the photos directly.

Of course all these techniques are preventing copying and stealing but in general we should never forget the rule that if we don't want something to be taken it's better to avoid adding it in a public space as the internet. It's also recommend that we resize and format our photos to a more web friendly format. It's always easier to protect a photo when it's too small to be printed.


Article listed in "Tutorials"

Bookmark and Share

Add a comment





search engine image protection says:August 17 2011

Thanks so much for this information! I've thought about this off and on, but didn't quite know what to do about it. Now I have options! Thanks again

Aneeq says:June 6 2012

Watermarking an image in PHP is very easy. If you follow the code below, you can do it in 2 minutes. Note: This code is being provided to you as a help by without any warranty and liability Place all the files in a folder on web server. Do not forget to upload the font file – arial.ttf. Once the image is watermarked, it will be placed in the folder named ‘watermarked’. You might need to give ‘write permission’ or ’777 permission’ to the folder named ‘watermarked’ as the new watermarked image will be written in this folder. Source: AND


Add a comment

Security image

Back to all posts