眼下很是多站點的涉及存在一些安全漏洞,黑客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」 ,