?
一、常用的攻擊手段
?
1.腳本注入
漏洞描述:
腳本注入攻擊在通過瀏覽器使用用戶輸入框插入惡意標記或腳本代碼時發生。
如:某個輸入框允許用戶向數據存儲中插入內容,如果將一段js腳本插入其中,則當其他用戶使用或瀏覽此數據存儲中的內容時,則那段js代碼會被激發執行。如果此代碼執行后果可想而知。
?
解決方案:
當向數據存儲插入數據之前,進行代碼過濾,屏蔽其中的惡意字符。
?
?
2.跨站點腳本攻擊
漏洞描述:跨站點腳本攻擊非常類似于腳本插入攻擊,當惡意腳本通過其他站點動態生成的web頁面插入到web瀏覽器時發生。在這種攻擊中,黑客的目標不是我們的站點,而是我們的用戶。
如:當某個搜索頁面通過get的形式傳遞搜索數據時(如:xxx.com?search=XXXXX),當在數據庫沒有查詢到此內容,會在頁面上將用戶所搜索的信息顯示出來(如:沒有找到XXXX),那么,如果黑客在search后邊加上js代碼(如:document.cookie)則后果可想而知。
解決方案:
對用get所傳遞的參數進行代碼過濾,屏蔽其中的惡意字符。
?
?
3.Sql注入
漏洞描述:簡單的說,sql注入就是將sql代碼傳遞到應用程序的過程,但不是按照應用程序開發人員預定貨期望的方式插入。由于應用程序設計很差,常常出現這種sql注入,它僅僅影響使用sql?字符串構建技術的應用程序。如:
?
解決方案:
對數據庫操作前,屏蔽用戶所提交的字符串中sql關鍵字。
?
4.Sql union攻擊
漏洞描述:
攻擊者也可以使用sql的union語句來獲得更多的數據。盡管sql union攻擊很難,但仍然是可能的。例如帶有sql的union語句的注約束是:兩個查詢應該從匹配的查詢中返回相同的列號,表達式或聚集函數、列的數據類型。
?
?
5.對腳本注入、跨站腳本攻擊、sql注入、sql? union攻擊的總結:
上述的漏洞都是系統常見的漏洞,也是容易注意不到的漏洞,上述的漏洞修補起來非常簡單,只需要兩端字符串替換代碼即可搞定,但要注意代碼的使用位置,不要在沒有必要的地方使用,否則會增加系統的額外負擔。
上述漏洞的具體防范措施:
5.1驗證內容
如果想避免我們在前面已介紹的幾種類型的攻擊,就必須記得在處理數據的輸入前腰先驗證它們。這種驗證是一種很簡單的驗證,如檢查所輸入的內容是否為數值,是否為16或是大于16的值,或者確認用戶僅可輸入a~z,A~Z,0~9的有效字符和一些特殊的字符。
5.2篩選用戶輸入
當接收到來自非信任源的不恰當輸入時,并不一定要拒絕該輸入。在這種情況下,篩選輸入是最好的辦法。
5.3編碼輸入內容
在有些情況下是允許客戶輸入如<script>等這樣的特殊字符的,但是這些字符時不允許執行的,那么就要對一些特殊字符重新編碼。如 < 編碼為<字符。(Server.HtmlEncode(string))
5.4避免跨站點的腳本攻擊
避免跨站點的腳本攻擊的唯一方法就是在處理用戶輸入之前全面徹底地驗證輸入內容。
?
?
6.隱藏窗體字段
漏洞描述:開發人員有時會在頁面上使用隱藏窗體用來保存一些數據。但是這些數據可以被任何人查看。只需要用戶有一點點的html知識,就可以在本地保存html頁面,修改頁面中的值,在重新經頁面提交給服務器。
解決方案:
始終使用session對象檢查用戶是否有一個有效的會話。
不再隱藏字段中保存任何敏感信息。如果不能避免這樣做,應該在隱藏字段保存數據時,在加密的重提中保存會話密鑰和時間戳。這樣有助于驗證來自瀏覽器的信息。
要想辦法處理隱藏字段中的數據被刪除時的情況
在客戶端檢查參數的長度和數據類型。
在服務器端重新進行驗證。
?
?
7.Cookies
漏洞描述:
Cookies是在http請求和http相應操作期間被設置為http題頭的一小塊信息。Web開發人員也使用cookies在客戶端存儲數據。在cookies中保存的數據可能是會話密鑰、瀏覽器行為、購物車等內容。黑客可以利用cookies中的信息,進行非法操作。
解決方案:
不在cookies中保存任何敏感信息。
如必須在cookies中保存敏感信息,則使用加密技術,對cookies內容進行加密,同時還要考慮到cookies內容被修改或刪除的情況。
在cookies中保存敏感信息最佳的方式是使用窗體身份驗證來創建加密的身份驗證票據。
使用ssl來保護cookies不被竊取。但是ssl只能保護服務器與客戶端之間的通信信息。無法保護存在客戶端的信息。
?
?
?
8.url
漏洞描述:
許多開發人員是用url從一個頁面向另一個頁面傳遞信息。由于傳遞的信息是基于文本的,而且他在瀏覽器中是可見的,所以內容很容易被篡改。
解決方案:
不在url包含敏感信息。應該將所有敏感信息都保存在服務器中,或者使用加密的格式設置命該信息并在服務器上驗證返回的結果。
編碼url,也就是說,把所有參數都放在同一個同一個元素當中,在對此元素內的內容進行編解碼。
?
9.視圖狀態
漏洞描述:
所有asp.net服務器空間都保存在一個叫做_viewstate的隱藏變量中。視圖狀態信息是以編碼的字符串形式保存在隱藏的變量中。當從客戶端向服務器端發送信息的過程中,信息有可能被黑客截獲,造成數據的泄露。
?
解決方案:
使用ssl加密傳輸過程中的信息。
?
?
10.控制錯誤信息
漏洞描述:
處理異常的有效辦法不是向用戶展示任何有關異常的有用信息,而是將異常記錄到時間日志中,并顯示一個能夠像忠實用戶提供更多可用信息的普通錯誤信息。利用這種方式,可防止信息的泄露,也能避免遭到惡意錯誤信息的攻擊。
?
解決方案:
使用單獨的錯誤頁面,顯示錯誤信息,也就是說當程序發生錯誤時,轉到已經定義好的錯誤頁面上去。
?
11.禁用調試和跟蹤
漏洞描述:
這兩種功能在開發周期中很重要,但在產品環境中是沒有意義的。如果開啟調試和跟蹤有可能暴露重要信息,如數據庫的鏈接字符串。
解決方案:
在web.config和iis中關閉調試和跟蹤。
?
上述說的是在程序編寫過程中能夠遇到的系統安全性方面的內容。
?
?
?
二、部分解決方案
- 1.?????? 防暴力破解
1.1漏洞描述:用戶登錄階段通過破解字典等反復登錄,用來破解用戶密碼的方式。
1.2解決方案:
?? (1) 使用頁面驗證碼,應用驗證碼是為了防止通過程序方式,自動去填寫信息,然后自動發送給web服務器而欺騙服務器去其進行注冊或登錄。
?? (2) 限制ip和mac地址,有些圖片驗證碼是可以通過破解程序讀取的,所以當驗證碼失效后,則通過限定ip或mac地址錯誤登錄的次數(當某個ip或mac地址的連續登錄錯誤的次數超過n次后,則停用此用戶)來限定。
?
2.登錄/注冊安全
2.1 漏洞描述:用戶登錄或者填寫登錄信息,向服務器端發送信息,有可能此信息被截獲,導致用戶的信息暴露。信息暴露分為(1)客戶端信息暴露,如:客戶端有病毒程序,自動記錄用戶所填寫信息。(2)客戶端向服務器端發送信息途中,信息被截獲。(3)服務器端有病毒程序或被黑客控制等,客戶信息在服務器端暴露。
2.2 解決方案:
2.1 客戶端解決方案
?? (1)在頁面上使用虛擬鍵盤,并且鍵盤數據生成順序隨即排列。這樣用戶輸入信息只需要點擊鼠標即可,這樣可以防止客戶端病毒程序記錄鍵盤所按內容。
?
2.2傳輸過程中解決方案
(1)使用https協議進行數據的加密傳輸,這樣可以保證在傳輸過程中的安全性。
(2)使用獨立編寫的客戶端加密程序,在客戶端將所發送的信息進行加密。
(3)使用外部設備,如加密key進行數據的加密。如:工行u盾。(原理:用戶唯一身份信息經256位高強度加密后以電子證書的形式存入一個特殊的U盤內,該U盤只讀且防拷貝,使用時,電腦發出身份認證信息,U盤接收后,將信息導入自身,進行解密運算后與證書內信息配對,配對成功后返回確認信息,整個解密、配對過程在U盤內部完成。)
?
3.上傳漏洞
漏洞描述:黑客可以利用系統提供的上傳功能,向服務器中上傳惡意文件。用以控制服務器或者導致系統信息泄露。
?
解決方案:
- 限制擴展名。如只可以上傳jpg,png,doc,rar等。
- 對上傳文件的文件都標識進行驗證。如:255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
- 對附加文件進行檢測。有一種技術是“文件隱藏技術”,其實就是利用windows下的一條命令合并兩個文件。
- 上傳路徑不能動態生成。此為iis6下的一個漏洞。當用戶注冊為一個名為 1.php的用戶并上傳一個改名為1.jpg的木馬后,我們得到此訪問路徑為:http://xxx.xxxx.com/1.php/1.jpg 這樣,這個1.jpg就會以php的后綴名運行。
?
?
?
?
三、高級內容
?
1. 秘密的存儲位置
系統的一些敏感信息,如數據庫的鏈接字符串等。如果存儲的位置不當,則容易引起數據的泄露。如,存儲在頁面中,存儲在后臺編碼中,存儲在.config中,存儲在受保護的.config中,存儲在內存中,使用散列技術存儲密碼,使用data protection api 存儲秘密。
?
2. 保護數據庫的訪問權限。
數據庫是最容易受到攻擊的地方,如果對數據的訪問權限設置不當(權限過高),或者訪問賬戶泄露,都可造成嚴重的后果。
?
解決方案:
1.? 數據庫賬戶。在給用戶分配數據庫權限是,盡量給最小的權限,這樣能將分先降到最低。
2.? 限制到數據庫的鏈接。保護數據庫最好的方法是不要將其放到公共區,這樣可以保證數據庫不能從外部進行訪問。
3.將秘密存儲在.net組建中。 用來保護數據庫鏈接最好的方式是將期存儲到.Net組件中或提供服務的com中。但是有些權限是可以訪問dll文件的,當對dll文件反編譯后,仍然是可以看到內容的。
?
?
3.Asp.net安全架構
Asp.net安全架構為幾個關鍵的安全過程包括身份驗證,授權,假冒和加密提供了必須功能
?? 1.身份驗證—誰到了那里?訪問站點的用戶身份是什么?
2.授權—您的許可級別是什么?訪問站點的用戶是否被授權他所請求的資源?
3.假冒—您準備假冒什么角色?用戶可以利用他們的標識、或者asp.net 程序的標識或者一些其他的賬戶訪問這些權限嗎?
?