Można dać zabezpieczenie z poziomu php + HTML.
image.php?name=plik.jpg.. Dla plików JPG, adekwatnie mozna to samo zrobic dla GIF, PNG...
<?php
if(!empty($_SERVER['HTTP_REFERER']) && !empty($_GET['name']) {
$Dir = "Zdjecia/";
$ImageFile = $Dir . $_GET['name'];
header ("Expires: Mon, 22 Sep 1997 09:00:00 GMT"); header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header ("Cache-Control: no-store, no-cache, must-revalidate"); header ("Cache-Control: post-check=0, pre-check=0", false); $im = imagecreatefromjpeg($ImageFile);
imagejpeg($tmp, null, 100);
imagedestroy($im);
}
}
?>
Teraz plik index.html
<div style="background-image: url('image.php?name=plik.jpg'); background-repeat: no-repeat; background-position: top center; width: 100px; height: 100px; display: inline;"><img src="spacer.gif" width="100" height="100" border="0"></div>
Krótki Opis 
Plik image.php generuje obrazek z pliku podany w zmiennej w adresie z folderu który definiujemy wewnątrz skryptu.
spacer.gif to obrazek 1px x 1px "pusty" przeźroczysty.
Nie jest to idealne rozwązanie bo można je ominąć jeśli ktoś pomyśli. Ale większość osób sie nie domyśli o co chodzi jeśli nie zobaczą kodu :-)
Ogólnie skrypt można jeszcze rozbudować i dodać szereg innych zabezpieczeń.
Ale chcialem Ci pokazać na prostym przykładzie co można wykombinować