用ASP.NET 1.1 新特征防范Script攻擊
發(fā)表時(shí)間:2024-01-17 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]網(wǎng)站的安全,很多時(shí)候,幾乎代表了一個(gè)單位網(wǎng)絡(luò)的安全。對(duì)于將網(wǎng)站作為企業(yè)對(duì)外形象的企業(yè)或者政府而言,網(wǎng)站安全更加重要,F(xiàn)在很多網(wǎng)站都安裝了防火墻等安全設(shè)備,可是,一些簡(jiǎn)單的進(jìn)攻,反而頗為讓人傷腦筋。比如,通過(guò)網(wǎng)站,提交惡意代碼,這就是比較難以防范的一種進(jìn)攻,一個(gè)比較簡(jiǎn)單的具體舉例,在需要用戶提交EM...
網(wǎng)站的安全,很多時(shí)候,幾乎代表了一個(gè)單位網(wǎng)絡(luò)的安全。對(duì)于將網(wǎng)站作為企業(yè)對(duì)外形象的企業(yè)或者政府而言,網(wǎng)站安全更加重要,F(xiàn)在很多網(wǎng)站都安裝了防火墻等安全設(shè)備,可是,一些簡(jiǎn)單的進(jìn)攻,反而頗為讓人傷腦筋。比如,通過(guò)網(wǎng)站,提交惡意代碼,這就是比較難以防范的一種進(jìn)攻,一個(gè)比較簡(jiǎn)單的具體舉例,在需要用戶提交EMAil地址的數(shù)據(jù)項(xiàng),如果用戶提交以下信息:<SCRIPT>alert(“hello from script”)</SCRIPT>,結(jié)果會(huì)怎樣呢?當(dāng)別的用戶進(jìn)入含有這個(gè)信息的頁(yè)面的時(shí)候,就會(huì)見(jiàn)到一個(gè)彈出信息,這是以上提交的惡意代碼直接運(yùn)行的結(jié)果,如果這樣的代碼稍微改動(dòng),更加復(fù)雜一點(diǎn),破壞效果自然更加驚人。程序員在設(shè)計(jì)程序的時(shí)候,如果沒(méi)有較好考慮對(duì)用戶提交信息進(jìn)行適當(dāng)?shù)臋z測(cè),很容易就會(huì)因?yàn)槌绦虻牟唤∪鴮?dǎo)致不可預(yù)料的后果。在ASP和ASP.NET1.0或者其他任何開(kāi)發(fā)工具中,我們不得不在程序中采用一些技巧來(lái)防范用戶提交的惡意代碼,而程序設(shè)計(jì)的原則就是“假定每一個(gè)用戶提交的信息都是惡意的”,所以,程序員不得不拿出部分精力來(lái)做提交信息的檢測(cè)工作。而在最新發(fā)布的ASP.NET1.1中,這樣的檢測(cè)就簡(jiǎn)單甚至是不必了,F(xiàn)在,我們來(lái)看一個(gè)具體的例子:
以上的代碼很簡(jiǎn)單,就是將用戶輸入的信息進(jìn)行現(xiàn)實(shí),運(yùn)行以后是這樣的:
以上我們輸入一個(gè)簡(jiǎn)單的“Hello world”,可以看到,頁(yè)面很正常的進(jìn)行了顯示,那么,如果我們輸入“<script>alert("hello!")</script>”會(huì)怎樣呢?現(xiàn)在就來(lái)看看運(yùn)行結(jié)果:
很明顯,是一個(gè)錯(cuò)誤信息:“potentially dangerous Request.Form value was detected…”意思是用戶提交的信息有潛在的危險(xiǎn),所以,不予提交。這就是Asp.NET的最新特征之一,將用戶提交信息的潛在危險(xiǎn)排除到最小,當(dāng)然,要使用這個(gè)最新特征是很簡(jiǎn)單的,直接在頁(yè)面中可以這樣設(shè)定:
<%@ Page validateRequest="true" %>
或者,也可以在網(wǎng)站配置文件Web.config中設(shè)定:
<configuration>
<system.web>
<pages validateRequest="true" />
</system.web>
</configuration>
當(dāng)然,要取消這個(gè)特征也是可以的,直接在以上設(shè)定中將False改為True就可以了。我們強(qiáng)烈建議將以上特征打開(kāi),設(shè)置為True,對(duì)每一個(gè)用戶的輸入進(jìn)行檢測(cè),F(xiàn)在,我們看看如果用戶現(xiàn)在關(guān)閉以上特征,頁(yè)面運(yùn)行會(huì)有怎樣的結(jié)果:
可以看到,以上頁(yè)面運(yùn)行以后,出現(xiàn)了用戶輸入直接運(yùn)行的結(jié)果:彈出一個(gè)提示信息。
那么,如果用戶不希望使用Asp.NET1.1的以上新特征,而又希望可以比較好的實(shí)現(xiàn)程序的安全性,應(yīng)該怎樣做呢?可以直接使用Server.HtmlEncode(string)來(lái)現(xiàn)實(shí),將所有用戶的輸入信息轉(zhuǎn)換為HTML格式,也就是原封不動(dòng)(現(xiàn)實(shí)出來(lái)和輸入的一樣)的現(xiàn)實(shí)用戶輸入的信息而不對(duì)惡意代碼進(jìn)行運(yùn)行,F(xiàn)在,我們來(lái)看一個(gè)舉例:
以上代碼和前面提到的代碼唯一的區(qū)別就是對(duì)用戶輸入進(jìn)行了HTML編碼,運(yùn)行結(jié)果如下:
我們可以看到,用戶帶有潛在危險(xiǎn)的輸入,已經(jīng)完全被避免了。以上方式和采用ASP.NET1.1的新特征相比,有什么不一樣呢?以上方式依然接受用戶輸入,只是將危險(xiǎn)代碼進(jìn)行了修改;而使用ASP.NET1.1的新特征,危險(xiǎn)代碼是完全拒之門外的,不會(huì)對(duì)數(shù)據(jù)進(jìn)行處理。
以上我們?cè)囼?yàn)了ASP.NET1.1的最新功能,并將它與別的技術(shù)進(jìn)行了對(duì)比。編程中,我們建議直接使用ASP.NET1.1提供的新特征來(lái)實(shí)現(xiàn)危險(xiǎn)排除,而不是采用HTML編碼的方式。