XSS攻擊範例以及避免方法

這幾天看到XSS攻擊的相關文章,想說手邊剛好有個範例剛好可以給大家演示一下XSS攻擊

有個功能是這樣的,在彈跳視窗輸入資料後,按下Add按鈕就會把資料加到主畫面的資料列裡面,我在其中的Problem這個欄位輸入簡單的Js語法後按下Add

結果沒有讓我失望地跳出alert訊息了,今天只是簡單的讓他執行alert訊息,如果我寫的是$("form").remove(),那麼我的表單裡面的東西就都被remove掉了,總而言之,有了這個漏洞,就能讓有心人士發揮創意,來用Js嘗試各種東西。這樣就是個簡單的XSS攻擊的範例!

進入檢視模式來看一下回到主畫面後,這個td欄位裡面會長什麼樣子。裡面就是一段Js語法!
 

這時候我再想,把這張表單submit出去之後,這段Js語法就會被存到DB的Problem欄位裡面了。之後只要在檢視模式,只要其他的User一點進去這筆資料的連結後就會突然看到一個alert視窗跳出來!

但是微軟工程師也不是吃素的,MVC這個框架已經有幫我們先做初步的表單資料驗證了,所以當我要submit這筆資料到後端時,就不會成功了,來看看是出現什麼失敗訊息。是的,已經先被偵測到有敏感字串而被擋下來了。

除了.Net MVC框架原本的檢核之外,我們也可以自己進行其他處理,
譬如說把Problem欄位的資料進行編碼處理  $('<div/>').text({你的參數}).html();,
把<>轉換為HTML 實體字元。來看看經過這樣處理後,傳到後端的Js字串會變成什麼樣子吧

 

這樣子傳到後端Controller時,就不會因為表單資料裡面有敏感字元而被擋下啦。
瀏覽器也只會把<script>alert(1111)</script>當成是一個字串來處理,而不是一個HTML標籤來處理了。