網(wǎng)(LieHuo.Net)教程 有時(shí)候,為了網(wǎng)站的安全,我們希望用戶訪問網(wǎng)站某些頁面或者整個(gè)網(wǎng)站的時(shí)候,必須通過HTTPS的方式訪問,而不允許HTTP明文方式訪問,如何正確的配置網(wǎng)站和編寫程序以達(dá)到一個(gè)理想的效果呢?
有些網(wǎng)站開發(fā)人員,采用了只開放了HTTPS-443端口,而關(guān)閉HTTP-80端口的方式,這樣的話,雖然可以造成用戶的確無法用HTTP訪問網(wǎng)站了,但如果用戶通過HTTP訪問網(wǎng)站,譬如直接在地址欄輸入網(wǎng)址www.xxx.com,則系統(tǒng)缺省就采用了HTTP方式,這時(shí)用戶就會(huì)看到一個(gè)網(wǎng)站無法訪問的出錯(cuò)信息,而絕大多數(shù)用戶都不具備專業(yè)的網(wǎng)站知識(shí),他們不會(huì)認(rèn)為是自己輸入不正確,而是認(rèn)為網(wǎng)站出錯(cuò)了。那如何妥善解決來自用戶HTTP的訪問請(qǐng)求呢?
正確的做法,應(yīng)該是將用戶通過HTTP訪問網(wǎng)站的請(qǐng)求,重新定位到HTTPS請(qǐng)求上。首先,要將網(wǎng)站配置成HTTP和HTTPS都可以訪問的模式,確保80和443端口全部打開,然后在那些必須通過https訪問的頁面的頭部加入一個(gè)判斷語句,邏輯如下:
If 用戶是通過HTTP訪問本頁面
Then 用HTTPS方式重新訪問本頁面
以下用ASP和JSP代碼舉例:
asp代碼: If Request.ServerVariables("HTTPS")="off" Then response.redirect "https://www.myssl.cn" & Request.ServerVariables("PATH_INFO") response.end End If |
jsp代碼: String scheme=request.getScheme(); String url=request.getRequestURI(); if(!"HTTPS".equalsIgnoreCase(scheme)) { response.sendRedirect("https://www.myssl.cn"+url); return ; } |
對(duì)于必須通過HTTPS的頁面,只需加入以上語句,即使用戶是通過HTTP訪問的該頁面,系統(tǒng)也會(huì)自動(dòng)將其轉(zhuǎn)變?yōu)镠TTPS。