Справочники, инструменты, документация

PHP: Защита сайта от скачивания

Очень неприятно, когда в интернете появляются сайты, сделанные методом скачивания содержимого с твоего, долгими трудами созданного. Вот от таких непорядочных людей и помогает этот скрипт.

Запись запрещающей строки в .htaccess осуществляется автоматически.

Скрипт вставляется в каждую страницу сайта с помощью include.

Описание настроек скрипта:

  • // error_reporting(0) после установки и настройки скрипта комментарий снять,
  • $limit // Максимально допустимое количество обращений к сайту с одного IP-адреса в минуту,
  • $htaccess // Путь к файлу .htaccess,
  • $htstring // Комментарий к строке в файле .htaccess,
  • $dirfiles // Путь к папке с временными файлами,
  • $logfiles // Имена временных файлов,
  • $excludes // Массив исключений с именами хостов, которым можно всё.
//error_reporting(0);
$address = $_SERVER['REMOTE_ADDR'];
$ref = $_SERVER['HTTP_REFERER'];
$url = urldecode($_SERVER['REQUEST_URI']);
$limit = 20;
$timenow = time();
$browser = $_SERVER['HTTP_USER_AGENT'];
$htaccess = $_SERVER['DOCUMENT_ROOT']."/.htaccess";
$dirfiles = $_SERVER['DOCUMENT_ROOT']."/antirip/logfiles/";
$logfiles = "$dirfiles".$address;
$hostname = gethostbyaddr($address);
$datetime = date("Y-m-d H:i:s");
$ip1 = getenv("HTTP_X_FORWARDED_FOR");
$ip2 = getenv("REMOTE_ADDR");
$hostip1 = gethostbyaddr($ip1);
$hostip2 = gethostbyaddr($ip2);
if ($ip1 != $ip2) {
 $htstring = NULL;
 if (!empty($ip1)) {
  preg_match_all('/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/', $ip1, $ip1);
  $ip1 = array_unique($ip1[0]);
  foreach ($ip1 as $v) {
   $htstring.="Deny from ".$v."  \\ Заблокирован Внутренний IP  \\ $hostip1\r\n";
  }
 }
 if (!empty($ip2)) {
  $htstring.="Deny from ".$ip2."  \\ Заблокирован IP Proxy  \\ $hostip2\r\n";
 }
} else {
 $htstring = "Deny from ".$address."  \\ Заблокирован Внешний IP  \\ $hostname\r\n";
}
$excludes = array(
"yandex.ru",
"rambler.ru",
"googlebot.com",
"webaltabot.com",
"inktomisearch.com",
"search.live.com",
"deb.telenet.ru",
"213.248.56.160",
"81.19.77.184"
);

if ($opendir = opendir($dirfiles)) {
 while (false !== ($log = readdir($opendir))) {
  if ($log != "." and $log != "..") {
   $timelog = date(filemtime("$dirfiles"."$log"));
   if ($timelog < ($timenow - 60)) {
    unlink("$dirfiles"."$log");
   }
  }
 }
}

foreach ($excludes as $v) {
 if (preg_match('/'.$v.'/', $hostname)) {exit;}
}

if (!file_exists($logfiles)) {fopen($logfiles, "w+");}
$write = "$datetime - $hostname<br>Browser: $browser<br>Referer: $ref<br>URL: $url<br>\r\n";
if ($logfiles) {
 if (is_writable($logfiles)) {
  if (!$handle = fopen($logfiles, 'a')) {exit;}
  if (fwrite($handle, $write) === FALSE) {exit;}
  fclose($handle);
 }  
}

if ((count(file($logfiles)) > $limit) and ($timelog > ($timenow - 60))) {
 if ($htaccess) {
  foreach (file($htaccess) as $h) {
   if ($h === $htstring) {
    exit;
   }
  }
  if (is_writable($htaccess)) {
   if (!$handle = fopen($htaccess, 'a')) {exit;}
   if (fwrite($handle, $htstring) === FALSE) {exit;}
   fclose($handle);
  }  
 }
}