2012年3月26日 星期一

Cross Site Scripting 攻擊的解法之一

要解決 Cross Site Scripting 方法很多,
下面示範一個範例+解法,


客戶的系統需要一個表單(Form):



我們寫的程式碼如下:



如果使用者輸入的值為: " onclick="alert(123)" bad="
執行出來的畫面如下:

說明: 去點輸入框, 真的會執行 alert(123)


執行出來的 html tag 如下:

說明: 紅色底線是我們輸入的值, 剛好可以做雙引號的跳脫.


===============================
解法如下:
1. 原本的程式碼:
<%=encodeInputBox(publisher)%>
修改為:
<%=encodeInputBox(publisher)%>


2.增加一個副程式:
function encodeInputBox(byval inputText)
if len(inputText) > 0 then
inputText=replace(inputText,"""","&#34;")
inputText=replace(inputText,"'","&#39;")
end if
encodeInputBox = inputText
end function


(修改後)執行出來的畫面如下:



(修改後)執行出來的 html tag 如下:



結論: 成功阻擋Cross Site Scripting 的攻擊.
心得: 這個 Cross Site Scripting 跟 SQL Injection 一樣, 都是直接執行了 user input 的文字裡有跳脫的控制字元, 只要處理一下 user input 的文字再輸出即可避開 Cross Site Scripting.

沒有留言:

張貼留言

Facebook 留言板