首先需要聲明,本文純屬1個毫無遠見和真才實學的小小開發人員的愚昧見解,僅供用于web系統安全方面的參考。
1、 簡單說明
Referer用來表明,閱讀器向 WEB 服務器表明自己來自哪里。
但是就它本身而言,并不是完全安全。
寫1個例子,可以任意修改http信息頭中的referer
2、 準備:
用httpClient4.0來具體實現
3、 Java修改http信息頭referer的源代碼
代碼非常簡單,就是修改了http頭的referer,配套示例的jsp在:http://blog.csdn.net/ffm83/article/details/44095025
源代碼以下
package com.safe;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
/**
* 用httpClient 摹擬修改referer屬性,僅供用于WEB安全防范示例。
*
* @author 范芳銘
*/
public class EasyModifyHeader {
public static void main(String[] args) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
//HttpGet httpGet = new HttpGet("http://test.laizi.cn:8080/114/bm/accountLogin");
String url = "http://127.0.0.1:8080/webStudy/http_accept.jsp";
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("referer", "http://www.bucunzai.com/admin.jsp");
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
HttpEntity entity = response.getEntity();
//打印目標網站輸出內容
System.out.println(EntityUtils.toString(entity));
EntityUtils.consume(entity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
}
}
4、 運行后結果
“`
看好你的門-阿飯同學
如果不是來自超級管理員,那末我沒法被訪問(超級管理員是來自1個叫做admin.jsp的頁面,保持在http頭中的referer)
地址:127.0.0.1
編碼:null
referer:http://www.bucunzai.com/admin.jsp
host:127.0.0.1:8080
connection:Keep-Alive
user-agent:Apache-HttpClient/4.3.6 (java 1.5)
accept-encoding:gzip,deflate
注意看:referer:http://www.bucunzai.com/admin.jsp
Referer已被修改了。