На наших сайтах мы занимаемся секцией защиты изображений. Поэтому, как часть защиты изображений, нам нужно предоставить антихотлинкинг для изображений. На нашем сайте мы показываем изображение с использованием сгенерированного URL-адреса.
Например, на нашем сайте источник изображения выглядит так: image_file.php?type=image&w=10&h=10&i=12
(это только поддельный URL, например, цель).
Поэтому, используя этот URL-адрес, нам нужно показать изображение на нашем сайте и в то же время хотите предотвратить его от горячей ссылки, есть ли способ предотвратить хотлинкинг?
Обратное хотлинкинг обычно определяется реферированием, но он не будет работать, если:
Вы заблокируете фактических пользователей от просмотра изображений.
Рассмотрите возможность использования сеансов / файлов cookie при решении этой проблемы. Затем вам придется передавать каждое изображение через php-скрипт.
Если вы можете использовать метод .htaccess, то, кроме того, как я уже сказал в своем комментарии, 100% -ный способ доказательства – использовать кодировку base64. Когда вы показываете изображения, вы можете использовать этот код для преобразования их в base64:
<?php $imagedata = file_get_contents("/path/to/image.png"); $base64 = base64_encode($imagedata); ?> <img src="data:image/jpeg;base64,<?= $base64; ?>" />
Кроме того, если вы хотите стать действительно творческим, вы можете «RAT» получить «воровские» ссылки, отобразив альтернативное изображение, используя ваш файл .htaccess … сделайте это так:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC] RewriteRule \.(gif|jpg|png)$ http://www.mydomain.com/dontstealmystuff.png [R,L]
просто убедитесь, что dontstealmystuff.png доступен на сервере
базовый пример .htaccess
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
выше позволяет пустой REFERER (например, я).
это не означает:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
есть немало вариантов, которые вы можете найти, возможно, придется немного поиграть, чтобы найти то, что лучше для вас.
Вообще говоря, правильный способ сделать это – это что-то вроде файла .htaccess с такой командой, как:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?somesite\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://img.ruphp.com/php/aNbhd.jpg [L]
Однако для этого в PHP это в основном то же самое. Все, что вы делаете, это проверить, что $ _SERVER ['HTTP_REFERER'] начинается с URL-адреса страницы. Однако можно обмануть HTTP_REFERER, чтобы он не составлял 100%. Однако пользователь должен это сделать (внешний сайт довольно (в основном …) многое не может обмануть это), поэтому он не позволит другим сайтам встраивать ваши изображения, не помещая ваш сайт в iframe или какой-либо другой hoopla.
Другой способ и, вероятно, самый безопасный, хотя он будет самым сложным на сервере, заключается в использовании переменной $ _SESSION для передачи маркера / флага, а затем проверить токен.
session_start(); $_SESSION["allow_images"] = true;
Затем на странице PHP, которая получает изображение для них:
if($_SESSION["allow_images"]) { //Send some pics! }
Однако это работает только в том случае, если пользователь не был на вашем сайте достаточно недавно, чтобы не продолжать свою собственную сессию.
Вы можете попробовать проверить значение $_SERVER['HTTP_REFERER']
на известное значение, но, как указано в документации , это может быть подделано. Однако это может помочь против общего дела.
в image_file.php для этого используйте http_referer.
$ref = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']: ""; if ($ref != "" && strpos($ref,'http://www.yourdomain.com/')===0) { //the request for this image is coming from some other domain, so take appropriate action } else { //do whatever logic you are currently using to show the images }
Найдите полномасштабное решение здесь: http://safalra.com/programming/php/prevent-hotlinking/