Защита файлов от скачивания по ссылкам с чужих сайтов на PHP

Очень неприятно, когда замечаешь, что трафик твоего сайта растет, а посетителей не прибавляется. И тут замечаешь, что "добрые люди" ставят ссылки на своих сайтах не на твою статью на твоем сайте, а непосредственное на твои файлы для скачивания. Вот от таких добрых людей и хочется сделать защиту. Она конечно не совершенна, но от простых ссылок непорядочных людей, ворующих контент очень эффективна.
<?php

/*

Защита файлов от скачивания по ссылкам с чужих сайтов 

ссылка на скачивание выглядит так:

http://example.com/antileech.php?down=4 <-- номер файла

или 

http://example.com/antileech.php?down=filename <-- имя файла

*/



// Настройки

$antiurl = "htmlweb.ru";    // Разрешённый сайт (referer).

$antidir = $_SERVER['DOCUMENT_ROOT']."/download/";    // Папка где находятся защищённые от скачивания файлы

$logfile = "log.htm";        // Файл протокола (должен быть html или htm и обязательно CHMOD 777.



if (isset($logfile)) {

if (!file_exists($logfile)) die("Файл <font color='red'><b>$logfile</b></font> не найден!");

if (!is_writable($logfile)) die("Для файла <font color='red'><b>$logfile</b></font> нужно зделать CHMOD 777!");



if ($_SERVER['HTTP_REFERER'] == "")$cnr_data = "[не известно]";

 else $cnr_data = "<a href=\"" . $_SERVER['HTTP_REFERER'] . "\">" . $_SERVER['HTTP_REFERER'] . "</a>";

$cnr_data = "<font color=\"green\">".$_SERVER['REMOTE_ADDR']."</font>

    HOST <font color=\"red\">".gethostbyaddr($_SERVER['REMOTE_ADDR'])."</font>

    visited on ".date("l d F H:i:s")." ссылка с ".$cnr_data."<br>";

@file_put_contents($_SERVER['DOCUMENT_ROOT'].$logfile, $cnr_data, FILE_APPEND);

}



// Проверка реферера

if (!stristr($_SERVER["HTTP_REFERER"], $antiurl) or !isset($_SERVER["HTTP_REFERER"]))

    die('<h1>Файл по указанной ссылке не доступен!</h1>');



if (is_numeric($_GET["down"])){

// Здесь идут файлы для скачивания по номерам

    if ($_GET["down"] == 1) $filename = "test1.rar";

    elseif ($_GET["down"] == 2) $filename = "test2.rar";

    elseif ($_GET["down"] == 3) $filename = "test3.rar";

}else $filename = $_GET["down"];



$path = $antidir . $filename;    // Полная ссылка на файл



// Проверка файла есть он или нет

if (!file_exists($path)){

    header("HTTP/1.0 404 Not Found");

    die("Файл '$filename' не существует!");}



$ftime = date("D, d M Y H:i:s T", filemtime($path));

// Проверка

if (strstr($_SERVER["HTTP_REFERER"], $antiurl)) {

    if (isset($_GET['down']) && isset($filename)) {

    $fsize = filesize($path);

    $ftime = date("D, d M Y H:i:s T", filemtime($path));

    $fd = @fopen($path, "rb");

    if (!$fd){header ("HTTP/1.0 403 Forbidden");exit; }



    if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {    // докачка

      $range = $HTTP_SERVER_VARS["HTTP_RANGE"];

      $range = str_replace("bytes=", "", $range);

      $range = str_replace("-", "", $range);

      if ($range) {fseek($fd, $range);}

    }

    $content = fread($fd, filesize($path));

    fclose($fd);

    if ($range) header("HTTP/1.1 206 Partial Content");

    else header("HTTP/1.1 200 OK");

    header("Content-Disposition: attachment; filename=" . basename($path));

    header("Last-Modified: $ftime");

    header("Accept-Ranges: bytes");

    header("Content-Length: ".($fsize-$range));

    header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);

    header("Content-type: application/octet-stream");

    print $content;

    exit;



} else die("Недействительный файл.");}

?>
Теги:
Защита файлов
Добавлено: 07 Апреля 2018 21:26:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...