網絡安全之IP僞造

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

       一、client的ip是經過http的頭部發送到server端的html

      比方,在打開網址www.baidu.com的時候。經過firebug可以看到請求頭部,頭部裏包括client的信息,比方cookie等。安全

 

     

 通常後臺獲取的clientip的代碼爲:cookie

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代碼:session

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」之目的?xss

      僞造這項值?假設你會敲代碼。並瞭解HTTP協議,直接僞造請求 header 就能夠。jsp

或者使用 Firefox Moify Headers插件就能夠。spa

 

     二、Modify Headers僞造ipfirefox

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

  

  

 

三、站點怎樣防禦ip僞造

     既然可以經過ip僞造,站點怎樣過濾這些僞造的ip? 通常作法是在應用server上強制將X-Forwarded-For的值設置爲client真實ip,詳細操做請自行研究。

 

       網絡中存在此漏洞的站點很是多,尤爲是一些投票類的站點。經過限制ip(一個ip僅僅能投一次票,或者一個ip僅僅能在必定的時間段投一次票)來限制重複投票的站點。

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

     本文部份內容參考了博客構造HTTP請求 Header 實現「僞造來源 IP  

相關文章
相關標籤/搜索