ASP.NET中的EntryDate屬性
我并沒(méi)有對(duì)前一節(jié)中的EntryDate屬性進(jìn)行編碼。這里存在兩個(gè)原因說(shuō)明當(dāng)在一個(gè)頁(yè)面中顯示這個(gè)EntryDate屬性時(shí)我們不需要對(duì)這個(gè)屬性進(jìn)行編碼。
首先,一個(gè)網(wǎng)站訪問(wèn)者沒(méi)有輸入這個(gè)EntryDate屬性的值。該EntryDate屬性的值是通過(guò)你的代碼創(chuàng)建的。在這種情況下,一個(gè)黑客是不能輸入惡意的代碼。
假定一個(gè)網(wǎng)站訪問(wèn)者的確輸入了該EntryDate屬性的值。因?yàn)樵揈ntryDate是作為一個(gè)DateTime類型存儲(chǔ)于SQL Server數(shù)據(jù)庫(kù)中的,所以,一個(gè)黑客也不能把惡意的代碼加入到此EntryDate屬性中。因此,當(dāng)你顯示它時(shí)你不需要擔(dān)心對(duì)這個(gè)屬性進(jìn)行編碼的問(wèn)題。
一般來(lái)說(shuō),當(dāng)一個(gè)用戶通過(guò)表單上的文本框輸入待提交的內(nèi)容時(shí)才是你應(yīng)該真正擔(dān)心JavaScript注入式攻擊的時(shí)候。例如,這樣情況下你應(yīng)該擔(dān)心用戶名稱的顯示問(wèn)題。如果你允許一個(gè)用戶創(chuàng)建他們自己的用戶名,那么,一個(gè)用戶有可能會(huì)潛在地把一個(gè)惡意的JavaScript字符串加入到他們的用戶名(或添加一個(gè)指向一個(gè)色情圖像的圖像標(biāo)簽)。
此外,你還應(yīng)該擔(dān)心超級(jí)鏈接的問(wèn)題。因?yàn)榇蠖鄶?shù)博客應(yīng)用程序都支持匿名用戶把一個(gè)超級(jí)鏈接提交到他們的網(wǎng)站—當(dāng)他們對(duì)一個(gè)博客提交相應(yīng)的注釋信息時(shí)。這種情況下,一個(gè)黑客就有可能把惡意的JavaScript加入到該鏈接中。下面是一個(gè)簡(jiǎn)單的示例:
- <a href="javascript:alert('Something Evil!')">Mr. Hackera>
當(dāng)你點(diǎn)擊這個(gè)鏈接時(shí),即執(zhí)行JavaScript代碼。當(dāng)然,在本文示例中不會(huì)發(fā)生任何惡意的事情。然而,你能夠從頁(yè)面上執(zhí)行的確可以竊取表單數(shù)據(jù)或cookies的代碼。
你可以使用JavaScript注入式攻擊來(lái)竊取cookies數(shù)據(jù)。例如,如果你把某一個(gè)用戶的信用卡號(hào)存儲(chǔ)在一個(gè)瀏覽器端的cookie中,那么,你可以把JavaScript注入到該頁(yè)面,然后通過(guò)使用document.cookie DOM屬性獲取信用卡號(hào)。
請(qǐng)注意,ASP.NET表單認(rèn)證和ASP.NET會(huì)話狀態(tài)技術(shù)都使用了瀏覽器端的cookies數(shù)據(jù)。其中,表單認(rèn)證依賴于一個(gè)存儲(chǔ)在一個(gè)名字為.ASPXAUTH的cookie中的認(rèn)證標(biāo)識(shí),而會(huì)話狀態(tài)則使用了一個(gè)名字為ASP.NET_SessionId的cookie。如果你能夠竊取這些cookies數(shù)據(jù),那么你就有能夠模仿合法的網(wǎng)站用戶而竊取用戶會(huì)話狀態(tài)信息.
幸好,微軟已經(jīng)預(yù)先采取了必要的預(yù)防措施使得很難竊取此表單認(rèn)證和會(huì)話狀態(tài)cookies數(shù)據(jù)。這兩種cookie都是屬于HttpOnly類型的 cookie。一個(gè)HttpOnly cookie是指一個(gè)特殊類型的cookie,你通過(guò)客戶端代碼是不能訪問(wèn)這樣的數(shù)據(jù)的,而僅可以從web服務(wù)器端讀取此HttpOnly cookies數(shù)據(jù)。
微軟Internet Explorer、Firefox和Opera這樣瀏覽器都提供了對(duì)于HttpOnly類型cookie的支持。遺憾的是,Safari和一些老式的瀏覽器還沒(méi)有提供這種支持。因此,你仍然必須十分仔細(xì)地對(duì)所有的用戶輸入的數(shù)據(jù)進(jìn)行HTML編碼;否則,一個(gè)惡意黑客便有可能竊取表單認(rèn)證和會(huì)話狀態(tài) cookie數(shù)據(jù)。
本文的目的是在于強(qiáng)調(diào)在進(jìn)行基于ASP.NET MVC框架開(kāi)發(fā)時(shí)必須重視安全問(wèn)題。正如在本文中所介紹的,JavaScript注入式攻擊是使用最為頻繁的安全攻擊類型。大多數(shù)web開(kāi)發(fā)者都不曾花上足夠的時(shí)間來(lái)考慮這個(gè)問(wèn)題。因此,我希望本文能夠提醒您,當(dāng)把數(shù)據(jù)顯示在一個(gè)MVC視圖時(shí)應(yīng)該總是對(duì)你的用戶收集數(shù)據(jù)進(jìn)行必要的編碼。以上是介紹ASP.NET中的EntryDate屬性。
【編輯推薦】