有個網站有較嚴的資安要求,因此在IIS管理員中將其設為必須使用SSL連線,當使用者使用HTTP而非HTTPS連線時,會看到403拒絕存取的錯訊訊息,不太友善:

403 - Forbidden: Access is denied.

You do not have permission to view this directory or page using the credentials that you supplied.

嚴格說起來,這個訊息回應不夠人性,未導引使用者解決問題,所以我們來試做一個讓使用者有賓至如歸感受的HTTPS強制導向服務。

必須使用SSL的錯誤回應碼是403.4,我們可以為它寫一個專屬自訂錯誤網頁,以文字提醒使用者要將http改為https;若使用者懶得打字修改URL,網頁還提供了一個連結,點下去就能立刻改連https版本的URL;若使用者已修練到"眼前的餅吃完也懶得轉圈"的極致境界,則也可以選擇什麼都不要做,繼續癱在椅子上喘10秒鐘,網頁暗藏了Script,先倒數10秒,再自動將網頁導向到https版的URL。相信這樣的設計,其賓至如歸的程度,應該直逼【踏進百貨公司時,20位SOGO小姐羅列兩排向你90度鞠躬,並嗲聲齊喊歡迎光臨】的水準。

自訂錯誤網頁的程式如下:

<html><head><title>網頁需要安全連線</title>
<script type="text/javascript">
function showMsg() {
    var cnt = 10;
    var sslUrl = location.href.replace(/^http/i, "https");
    document.getElementById("lnkSSL").href = sslUrl;
    setInterval(function() {
        if (--cnt >= 0)
            document.getElementById("spnCountDown").innerHTML = cnt;
        else
            location.href = sslUrl;
    }, 1000);
}
</script>
<style type="text/css">
div 
{ 
    background-color: #cccccc; border: 2px solid black; 
    padding: 5px; width: 300px; line-height: 150%;
    font-size: 11pt;
}
#spnCountDown { color: red; padding: 4px; }
</style>
</head>
<body onload="showMsg();">
<div>
本網站限定使用SSL加密連線!<br />
請將網址之http://改為https://後重新連線,
亦可點選<a id="lnkSSL">這裡</a>直接改用加密連線。<br />
或請稍候<span id="spnCountDown">10</span>秒,
由系統為您自動轉接。
</div>
</body></html>

接著我們要用這個網頁取代預設的403.4錯誤回應,以IIS7為例,將這個網頁存成SSLRedirect.htm,放在Web Application的根目錄下,並設定web.config如下(亦可使用IIS管理員GUI設定)。當使用者因未使用SSL被拒產生403.4錯誤時,就會改顯示上述網頁,讓使用者體驗VIP級的親切服務囉!

    <httpErrors>
        <error statusCode="403" subStatusCode="4" path="SSLRedirect.htm" responseMode="File" />
    </httpErrors>
</system.webServer>


Comments

# by Ammon

連提示訊息都不用,直接自動轉 https 不是更賓至如歸?

# by Jeffrey

to Ammon, 接到的需求中有提到希望User都將我的最愛連線也改成https...

# by Will 保哥

建議將 location.href.replace(/http/i, "https"); 修改成 location.href.replace(/^http/i, "https");

# by Jeffrey

to 保哥,早上騎車時有想到這點,但你知道中年人的記性... orz,謝謝提醒!

# by 海大

不好意思 插個話 我想要從0到有學ASP.NET 請問我該從哪個網頁看起

# by Jeffrey

to 海大,要從無到有,建議還是找本書從頭看起較能系統化學習(恕沒法推薦,一來我熟悉的入門書都已年代久遠,二來則是各人口味不同,偏好的書籍風格也不一樣,到書店挑一本順眼會比較好),如果是網站,我建議可以參考Allen大的ASP.NET電子書( http://bit.ly/aTKakv ),有不少基本觀念。

# by peter

thx~

# by Michael

請問您的這支程式, 我可以用在我們公司的網站嗎?

# by Jeffrey

to Michael, 歡迎引用~ (如果沒有其他疑慮的話,還可以留言分享一下貴公司的連結,當成本文的Live Demo呢,呵呵!)

# by Michael

hi Jeffrey: 謝謝您同意我們引用您的大作, Demo 網址如下 http://web.cloud-erp.com.tw 這是我們放在中華雲市集的一個 Web ERP 系統 公司官網: www.gex.com.tw

# by Jenny

最近剛好有此需求, 非常實用,謝謝您的分享!!

Post a comment