2012年4月19日 星期四

【ASP.NET】跨網站攻擊防範Xss

今天拿回送檢測程式碼,被檢測出含有SQL Injection、Tag injecting、Xss剛好各一支0.0
我已經用AntiXss元件保護,結果還是一樣。
或許是檢測軟體不理會AntiXss元件內容,只針對原始碼做校正。

好吧,那只好學點正規的防範語法:

提升一下撰寫的程式品質。


SQL Injection

找到一組資料直接用字串送進(插入)查詢語法


舉例
"SELECT UserName FROM tblAccount WHERE Account='" + txtUID.Text + "' AND Password='" + txtPWD.Text + "'"; 


修正成用參數送入

ok明天拿去測看看應該是沒問題了

Tag injecting

這個頭比較大,不過只要做Server-Side的HtmlEncode應該就可以了
那只好又把AntiXss元件拿來用看看能不能通過檢測
首先Imports  AntiXss
 在161行加入HtmlEncode
而166行是檢測程式偵測到入侵點

AntiXss元件請參照
1.http://blogs.msdn.com/b/securitytools/archive/2010/09/30/antixss_2d00_4_2d00_0_2d00_release_2d00_notes.aspx
2.http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

Xss
是在65行被偵測到受污染的值QueryStr
我用兩個做法

  1. 限定長度(因為欄位裡資料只有3字元)
  2. 再用一次AntiXss,老天保佑有效。



另外我找到HttpUtility.HtmlEncode函式,只要

字串變數 =HttpUtility.HtmlEncode(Request.QueryString("傳入值"))

這樣也可以防Xss
等過幾天檢測報告出來再來檢討看看@@


(7/5補:檢測後,都正常了,Html tag比較頭痛,如果前端開發時,沒有使用Asp.net的內建元件,如<input type="text" name="test" value="" />這類型的Html語法,要留意一下,是否有Tag injecting的問題,上述程式檢測出的問題,裡面就有一隻用Html語法(非拖曳Asp.net元件)直接接到Server而產生Tag injecting的漏洞,建議寫這類型的語法,可以在輸入的部分加上防護,例如html(Client端)的編碼防護,或是接收後(Server端)的編碼防護,基本上就可以補足Tag injecting漏洞)

參考
1.強推黑暗大大的文,超超超仔細
http://blog.darkthread.net/post-2008-05-22-hit-and-run-sql-injection-attack.aspx
2.gipi大的文
http://www.dotblogs.com.tw/jimmyyu/archive/2009/08/16/10098.aspx
3.黑大另一篇TIPS-小心Eval潛藏XSS漏洞
http://blog.darkthread.net/post-2008-06-19-eval-xss.aspx


沒有留言:

張貼留言

如果久久沒有反應,請直接寄信
應該是我不太會用google blogger 導致有留言過久未處理><
實在深感抱歉..