網絡安全之IP偽造


         眼下非常多站點的涉及存在一些安全漏洞,黑客easy使用ip偽造、session劫持、xss攻擊、session注入等手段危害站點安全。在紀錄片《互聯網之子》(建議搞IT的都要看下)中。亞倫·斯沃茨(真實人物,神一般的存在)涉嫌利用麻省理工的網絡,通過ip偽造從JSTOR中下載了150萬篇論文。本文通過firefox看下一個簡單的ip偽造是怎樣實現的。

       1、client的ip是通過http的頭部發送到server端的

      比方,在打開網址www.baidu.com的時候。通過firebug能夠看到請求頭部,頭部里包括client的信息,比方cookie等。

 

     

 一般后台獲取的clientip的代碼為:

php代碼:

private function _get_client_ip() {

$ip = $_SERVER['REMOTE_ADDR'];

if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {

$ip = $_SERVER['HTTP_CLIENT_IP'];


jsp代碼:

public String getIpAddr(HttpServletRequest request) {
       String ip = request.getHeader("x-forwarded-for");
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
          ip = request.getHeader("Proxy-Client-IP");
       }
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
          ip = request.getHeader("WL-Proxy-Client-IP");
       }
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
          ip = request.getRemoteAddr();
       }
       return ip;
}

 

   代碼片段即是獲取clientIP,這段程序會嘗試檢查 HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, 依據之前的原理說明,以 HTTP_開頭的 header,  均屬於client發送的內容。那么,假設client偽造 Client-Ip, X-Forward-For,不就能夠欺騙此程序,達到“偽造 IP”之目的?

      偽造這項值?假設你會敲代碼。並了解HTTP協議,直接偽造請求 header 就可以。

或者使用 Firefox Moify Headers插件就可以。

 

     2、Modify Headers偽造ip

   安裝Modify Headers后,加入一個X-Forwarded-For,並填入一個ip,置為可用后,打開對應網頁,server就會獲取到該偽造ip。

  

  

 

3、站點怎樣防護ip偽造

     既然能夠通過ip偽造,站點怎樣過濾這些偽造的ip? 一般做法是在應用server上強制將X-Forwarded-For的值設置為client真實ip,詳細操作請自行研究。

 

       網絡中存在此漏洞的站點非常多,尤其是一些投票類的站點。通過限制ip(一個ip僅僅能投一次票,或者一個ip僅僅能在一定的時間段投一次票)來限制重復投票的站點。

別人可能會利用此漏洞來偽造ip。突破這樣的限制。所以站點開發人員要重視這類安全。

     本文部分內容參考了博客構造HTTP請求 Header 實現“偽造來源 IP  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM