做項目也有一段時間了在程序中也遇到很多安全方面的問題也該總結一下了這個項目是一個CMS系統系統是用ASPNET做的開發的時候發現微軟做了很多安全措施只是有些新手程序員不知道怎麼開啟下面我通過幾個方面簡單介紹
SQL 注入
XSS
CSRF
文件上傳
SQL 注入
引起原因
其實現在很多網站中都存在這種問題就是程序中直接進行SQL語句拼接可能有些讀者不太明白下面通過一個登錄時對用戶驗證來說明
驗證時的sql語句
select * from where user=
+txtUsername
Text+
and pwd=
+txtPwd
Text+
這是一段從數據庫中查詢用戶對用戶名密碼驗證
看上去好象沒有什麼問題但是實際這裡面淺藏著問題用戶名admin 密碼admin
select * from where user=
admin
and pwd=
admin
如果用戶和密碼正確就可通驗證如果我用戶名asdf or = 密碼隨意輸入
我們再來看語句
select * from where user=
asdf
or
=
and pwd=
執行後看到什麼?是不是所有記錄如果程序只是簡單判斷返回的條數這種方法就可以通驗證
如果執行語句是SA用戶再通過xp_cmdshell添加系統管理員那麼這個服務器就被拿下了
解決方法
a 這個問題主要是由於傳入特殊字符引起的我們可以在對輸入的用戶名密碼進入過濾特殊字符處理
b 使用存儲過程通過傳入參數的方法可解決此類問題(注意在存儲過程中不可使用拼接實現不然和沒用存儲過和是一樣的)
XSS(跨站腳本攻擊)
引起原因
這個也有時被人們稱作HTML注入和sql注入原理相似也是沒有特殊字符進行處理是用戶可以提交HTML標簽對網站進行重新的構造其實在默認的情況下在aspnet網頁中是開啟validateRequest屬性的所有HTML標簽後會NET都會驗證
但這樣直接把異常拋給用戶多少用戶體驗就不好
解決方法
a 通過在 Page 指令或 配置節中設置 validateRequest=false 禁用請求驗證然後我們對用戶提交的數據進行HtmlEncode編碼後的就不會出現這種問題了(ASPNET 中編碼方法ServerHtmlEncode(string))
b 第二種是過濾特殊字符這種方法就不太提倡了如果用戶想輸入小於號(<)也會被過濾掉
CSRF(跨站點請求偽造)
引起原因個人認為csrf在Ajax盛行的今天來說倒是方便了因為它可以在你不知道的情況用你的通過驗證用戶進行操作所以也被稱為浏覽器劫持如果你已通過某個網站的驗證那麼你將以你的角色對網站進行操作比如你是管理員可以添加其它的用戶到管理組但是如果有人構造了添加管理員的鏈接被管理員點後也會執行相應操作
解決方法
修改信息時添加驗證碼或添加Session令牌(ASPNET中已經提供一個自動防范的方法就是用頁面屬性ViewStateUserKey在Page_Init方法中設置其值thisViewStateUserKey=SessionSessionID)
文件上傳
引起原因
如果你的網站使用的是在線編輯器如FCKEditoreWeb等等如果沒有處理好文件上傳那麼上線後網站會很快的被篡改
解決方法
在用戶登錄時加入是否可上傳文件的Session標志其實Fckeditor已經寫好了直接把驗證函數CheckAuthentication()中的注釋段中
return ( Session[
IsAuthorized
] != null && (bool)Session[
IsAuthorized
] == true );
注釋去掉在登錄成功加入
Session[
IsAuthorized
] = true;
就可以了
如果網站沒有用到上傳到服務器的文件浏覽的話把fckeditoreditorfilemanager中的browser目錄也刪除
From:http://tw.wingwit.com/Article/program/net/201311/15358.html