2014年8月14日 星期四

[ASP.NET C#] Cookie加密

Reference:http://atic-tw.blogspot.tw/2013/07/cookie-secure-httponlyaspnet.html

保護 Cookie 的安全(Secure 與 HttpOnly),在ASP.NET環境

Cookie 的 Secure 屬性是強迫 Cookie 在傳輸時使用 SSL 加密機制。
Cookie 的 HttpOnly 屬性是指示 Cookie 只供瀏覽器與WebServer之間之網頁溝通使用,不允許JavaScript 存取Cookie (document.cookie)。

一、於程式中產生的Cookie,可以利用 HttpOnly 及 Secure 屬性,針對特定的 Cookie 要求
myCookie.HttpOnly true

myCookie.Secure = true;

二、透過 WebConfig 設定,讓所有的 Cookie 都啟用 Secure:
 ASP.Net 2.0 以後,可以在 WebConfig的 <system.web>區段內加入:
<system.web>
   <httpCookies httpOnlyCookied="true" requireSSL="true" />
   ....
</system.web>

但上面的設定方式,在ASP.Net 1.x 並不支援,所以必須在 Global.asax 中動手腳:
在Global.asax.vb 中加入下面這一段程式 ,強制每一個Cookie 都加入指定的屬性

   Sub Application_EndRequest(ByVal sender As Object, ByVal As EventArgs)
        ' 於每一個要求開始時引發
        For Each sCookie As String In Response.Cookies
            Response.Cookies(sCookie).Secure True
            Response.Cookies(sCookie).HttpOnly True
        Next
    End Sub

三、 Secure 與 HttpOnly 是兩個屬性,請視需要設定(即沒有必須同時都設)

-------------------------------------------------------------------------------------------------
緣由:
早期的 ASP.NET 程式最近被黑箱掃描程式找到一項「中風險」項目:
[加密的階段作業 (SSL) Cookie 中遺漏安全屬性]

測試類型:
 應用程式層次測試
威脅分類:
 應用程式隱私測試
原因:
 Web 應用程式會透過 SSL 傳送未受保護的 Cookie
安全風險:
 有可能竊取在加密階段作業期間傳送的使用者和階段作業資訊 (Cookie)
CWE:614
技術說明:
 在應用程式測試期間,偵測到在加密階段作業中,所測試的 Web 應用程式設定了不含 "secure" 屬性的 Cookie。
 由於這個 Cookie 未包含 "secure" 屬性,因此,也可能在未加密的階段作業期間將它傳給網站。

由於此 Cookie 並非我程式中產生的,而是系統為 Session 所建立,為解決此一中風險弱點,只好採用 Global.asax.vb 中加入控制程式的方法因應!

沒有留言:

張貼留言