保護 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;
myCookie.Secure = true;
二、透過 WebConfig 設定,讓所有的 Cookie 都啟用 Secure:
ASP.Net 2.0 以後,可以在 WebConfig的 <system.web>區段內加入:
<system.web>
<httpCookies httpOnlyCookied="true" requireSSL="true" />
....
</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 e 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 中加入控制程式的方法因應!
沒有留言:
張貼留言