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 httpOnlyCookies="true" requireSSL="true" />
....
</system.web>
<httpCookies httpOnlyCookies="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 是兩個屬性,請視需要設定(即沒有必須同時都設)
四、雖然完成上面的設定,可以讓應用程式在傳送 Cookies 時加入 Secrure 及 HttpOnly=true 的旗標,但 ASPX 的 SessionCookie (.ASPXAUTH) 卻仍無法以 SSL 傳送,弱點掃描時會發生「Cookie Security: Cookie Not Sent Over SSL」的風險,解決方式是在 中加入 requireSSL="true",如下所示:
<authentication mode="Forms">
<forms loginUrl="http://mojsingle.moj/mojsingle/script/mojlogin1.asp" timeout="30" protection="All" requireSSL="true" />
</authentication>
<authentication mode="Forms">
<forms loginUrl="http://mojsingle.moj/mojsingle/script/mojlogin1.asp" timeout="30" protection="All" requireSSL="true" />
</authentication>
-------------------------------------------------------------------------------------------------
緣由:
早期的 ASP.NET 程式最近被黑箱掃描程式找到一項「中風險」項目:
[加密的階段作業 (SSL) Cookie 中遺漏安全屬性]
測試類型:
應用程式層次測試
威脅分類:
應用程式隱私測試
原因:
Web 應用程式會透過 SSL 傳送未受保護的 Cookie
安全風險:
有可能竊取在加密階段作業期間傳送的使用者和階段作業資訊 (Cookie)
CWE:614
技術說明:
在應用程式測試期間,偵測到在加密階段作業中,所測試的 Web 應用程式設定了不含 "secure" 屬性的 Cookie。
由於這個 Cookie 未包含 "secure" 屬性,因此,也可能在未加密的階段作業期間將它傳給網站。
由於此 Cookie 並非我程式中產生的,而是系統為 Session 所建立,為解決此一中風險弱點,只好採用 Global.asax.vb 中加入控制程式的方法因應!
沒有留言:
張貼留言