[資訊安全]IE8.0的Anti-XSS機制
今天在網路上看到兩位噗友分別提到IE8.0的Anti-XSS機制,這議題前陣子在公司內也有被提起過,今天晚上就來給它玩一玩吧,如何驗證這個功能呢,我們先寫一個最常發生XSS問題的寫法:
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Page.Request.QueryString["id"]);
}
}
直接讀傳過來的QueryString,二話不說就直接Response.Write到畫面上,這段程式在一般輸入條件是結果是這樣:
但如果今天我們輸入這樣的網址呢?alert('ya');http://localhost:2195/WebSite1/Default.aspx?id=gipi<script>alert('ya');</script>,結果是這樣子:
你以為這就是IE8.0的Anti-XSS機制了嗎?很抱歉並不是喔,這是ASP.NET本身的機制,而IE8.0的Anti-XSS機制號稱可自動修復問題,所以絕對不是這個錯誤畫面,這個錯誤畫面是因為頁面的ValidateRequest屬性被設定為true(預設值),當檢查到頁面傳輸的資料有包含<>這一類的tag時就會視為有有害,直接檔掉,所以如果要禁止XSS的發生,這也是一種解法,但一來並不完整,二來如果資料確實會包含<>這樣的tag時怎麼辦?以下我們先將頁面的ValidateRequest屬性設定為false:
再次檢視畫面,發現IE8.0的Anti-XSS是什麼鬼?怎麼完全沒有效果,那段script還是被執行了,我受騙了嗎?
後來我仔細的想想,我的網址是打localhost,或許因為它識別是本機電腦,所以就放行了,我連忙將IP的部分改為127.0.0.1,幸好它的結果沒讓我失望,它真的擋掉了,擋掉的方法是他將<script>的tag給取代掉了,並在網頁的上頭警示:Internet Explorer has modified this page to help prevent cross-site scripting. Click here for more information...
而同樣的內容我放到Chrome上:
放到FireFox上:
在這一點,看來IE8.0確實是勝了一些。
另外在這一篇:[資訊安全]防範Cross-Site-Scripting(XSS)中我們提到要防範多種手法,我們再來看看它是否有檔到,我們將網址改變一下,把<改成%3C,將>改成%3E,再次執行看看,我們發現結果一樣,還是擋到了,由此可見,IE8.0的Anti-XSS並不是隨便說笑的,確實是有做到防護,雖然將<script>的tag移掉這種做法不太美,不過起碼是做到基本的防範了,值得嘉許。
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |