[資訊安全]防範Cross-Site-Scripting(XSS)
SQL Injection的部份我想不用多說了,大家都很熟悉了,這部分可以參考大鈞的文章:
[SQL]淺談SQL Injection發生後
而XSS的部分,小弟之前也有寫過一篇,主要是說明如何透過微軟提供的Anti-Xss Library來解決XSS問題:
[ASP.NET]防止跨網站(XSS)指令碼攻擊
本文主要則著重在說明一些防範XSS常見的方法,其中有好的方法,也有不好的方法,都列給大家參考:
《防範XSS的錯誤方法》
如果我們認為只有當輸入值中包含<或>等html tag才會造成XSS問題的話,請看上面這個例子,這個例子中使用者完全沒有輸入任何的html tag,但還是會造成資安的問題,所以判斷使用者輸入的內容是否包含某些特定符號,不管是在防範SQL Injection或XSS都不太保險的。
《防範XSS的正確方法》
不要把ValidateRequest設定為false:當我們將這個屬性設定為true時,如果submit的資料中有包含html tag,則會出現錯誤,而一般的技術論壇為了讓使用者可以輸入html tag,大多會將此屬性設定為false,這時候如果沒有良好的架構去防範XSS,問題將會很大,且一旦發生了,實在很丟臉。
不信任使用者輸入的資料:這不只可以防XSS,其它的問題也可以一併防掉,絕對不要把使用者輸入的資料直接拿來使用,最起碼要先檢查是否正確。
加入編碼:不管是HtmlEncode或者UrlEncode,在系統中只要是有可能造成錯誤或者資安漏洞的,應該都要先進行編碼。
設定TextBox的MaxLength屬性:非常常見的方法,只要你無法突破最大長度的限制,你想登打什麼樣的資料都無法達成。
對cookie資料加密:如果你的系統會將cookie中的資料直接拿來使用,而沒有經過特別的處理,那是非常可能被當成一個入侵的點,例如下面這個例子,直接讀取cookie的值,並直接將form送出,如果cookie的值被別人修改過,那安全性就岌岌可危了。
了解駭客各種攻擊手法:上面提到那個例子,使用者打入的內容並沒有包含任何的html tag,但經過IE解譯後會被還原成包含html tag的內容,這樣的攻擊方式,如果我們用是否有包含<或>來判斷的話,問題就很多了。
《面對XSS使用者的自保之道》
以上是面對XSS問題使用者的自保方法,實際上這只能作道德勸說,因為多數人都知道將IE設定為高安全性是最安全的,但過高的安全性會讓你瀏覽網頁時常常發生error,在多次的妥協後你的安全性可能已經調整到中,甚至低了,但這邊還是要提醒大家,對於Internet上的網頁,安全性最好還是設定的高一些,只有針對一些信任的網頁可以將安全性稍微調低一點,但請記得防火牆一定要開。
另外對於機密資料,如網路銀行或者線上交易平台的登入,千萬不要透過其它網頁做連結,因為他很有可能是一個作的非常相像的假網頁,誘使你把你的帳號密碼打入,他一旦記錄到後,就可以開始登入你的網路銀行做破壞了,非常危險,前陣子不是就有兩個人做了一個假的人事行政局網頁嗎?你沒仔細看還真的看不出來呢,還是小心為上。
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |