萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> 如何阻止網站被惡意反向代理訪問

如何阻止網站被惡意反向代理訪問

 最近有人用小站數據,利用反向代理技術,做了個小偷站。用戶訪問的是他的網址,但實質上內容數據確是我的,這是一起惡意反向代理事件

什麼是反向代理?    先說說正向代理的概念:    正向代理,也就是傳說中的代理,他的工作原理就像一個跳板。簡單的說,我是一個用戶,我訪問不了某網站,但是我能訪問一個代理服務器。這個代理服務器呢,他能訪問那個我不能訪問的網站,於是我先連上代理服務器,告訴他我需要那個無法訪問網站的內容,代理服務器去取回來,然後返回給我。從網站的角度,只在代理服務器來取內容的時候有一次記錄,有時候並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站。    結論就是,正向代理是一個位於客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。    那麼反向代理的概念呢?    比如用戶訪問 http://www.nowamagic.net/librarys/veda 這個頁面,但www.nowamagic.net實際上並不存在這個頁面,他是偷偷從另外一台服務器上取回來,然後作為自己的內容吐給用戶。    但用戶並不知情,這很正常,用戶一般都很笨。這裡所提到的 www.nowamagic.net 這個域名對應的服務器就設置了反向代理功能。    結論就是反向代理正好相反,對於客戶端而言它就像是原始服務器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理 的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始服務器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。    惡意反向代理的危害    網站被惡意反向代理有什麼危害呢?這裡列舉一下:    •首先肯定會占用服務器資源,網站打開速度受影響。  •其次,別人通過代理盜用你的網站數據,對用戶與不是那麼智能的搜索引擎而言,相當於建了一個與你一模一樣的站點,那麼很有可能你的站點會進搜索引擎沙箱,甚至被降權。  •如果被惡意代理的頁面,還掛有你的聯盟廣告(比如Adsense),這就十分危險了,如果有人點擊了上面的廣告,很容易被Adsense封號。  •還有很多危害,讀者可以自行腦補……     js 級別的解決方案 代碼如下: <script type="text/javascript"> if (document.domain != 'nowamagic.net' && document.domain != 'www.nowamagic.net'){  window.location.href='http://www.nowamagic.net/'; } </script>     腳本很簡單,如果地址欄中的網址不是 nowamagic.net 和 www.nowamagic.net 中的任何一個,那麼就把地址欄轉向 http://www.nowamagic.net/ 。這段代碼同樣可以避免被人使用反向代理技術“偽造”一個跟自己一模一樣的網站。   題外話:如何防止網站被iframe嵌入。有些人用iframe做了個框架,把我們網站嵌入其中,訪客來浏覽的時候,好像是在浏覽他自己的網站一樣,那麼如何解決呢?以下方法可破:    代碼如下: <script type="text/javascript"> <!-- if (top.location != self.location)top.location=self.location; // --> </script>     php 級別的解決方案   js 級別的解決方案雖然能夠讓惡意代理頁面跳回來,但是對搜索引擎不怎麼友好。下面是服務器端(PHP)的解決方案,代碼比較簡單,就不多說了。    代碼如下: $proxy_rs = $this -> proxy_filter(); if( $proxy_rs != 'nowamagic.net' || $proxy_rs != 'www.nowamagic.net' )  {  echo '非法反向代理訪問';  //header('Location: http://www.nowamagic.net/');  exit; }   public function proxy_filter() {  /*  $svrUrl = 'http://' . $_SERVER['SERVER_NAME'].$_SERVER["PHP_SELF"];  if (!empty($_SERVER["QUERY_STRING"]))  {   $svrUrl .= "?".$_SERVER["QUERY_STRING"];  }    return $svrUrl;  */  return $_SERVER['SERVER_NAME']; }     htaccess 級別的解決方案   .htaccess   代碼如下: RewriteEngine On RewriteBase / php_value auto_append_file proxy.php     proxy.php  代碼如下: <?php $f = getenv("HTTP_X_FORWARDED_FOR"); $server = getenv("HTTP_HOST"); if (($f!="")&&($server!="nowamagic.net")&&($server!="www.nowamagic.net")){  echo '本服務器禁止惡意反向代理!'; } ?>     這個由於我網站的特殊性,沒試驗過,但是網上常用這種方法。   Apache httpd.conf 級別的解決方案 這個 Apache 上如何禁止我還沒搗鼓出來, Nginx 倒可以,但是我用的是 Apache,如果你知道,請告訴我下~  
copyright © 萬盛學電腦網 all rights reserved