Если у вас Apache в качестве веб-сервера, можно не нагружать PHP выяснением того, кто откуда пытается загрузить картинку. Ведь в случае PHP вам все-все картинки придётся отдавать PHP-скриптом — это какая-то лишняя нагрузка.
С помощью .htaccess можно сделать примерно такой вариант (файл .htaccess в корне сайта files.domain.com):
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !domain\.com$ [NC]
RewriteRule .* - [R=404,L]
Я могу ошибаться немного в регулярных выражениях, но суть, я думаю, понятна: проверяем, чтобы строка %{HTTP_REFERER} заканчивалась на «domain.com» (сюда попадут и «domain.com» и «www.domain.com» и «image.domain.com» и «любойподдомен.domain.com»). Если реферер не подходит под это определение, редиректим на страницу 404.
%{HTTP_REFERER} — это содержимое HTTP-заголовка
Referer.
С другой стороны, Referer можно легко подделывать с помощью PHP, и злоумышленник может написать на PHP простой прокси, который будет по своим адресам отдавать ваши картинки, отправляя вам легитимное значение поля Referer.