成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Web開發常見的幾個漏洞解決方法

開發 前端
基本上,參加的安全測試(滲透測試)的網站,可能或多或少存在下面幾個漏洞:SQL注入漏洞、跨站腳本攻擊漏洞、登陸后臺管理頁面、IIS短文件/文件夾漏洞、系統敏感信息泄露。

平時工作,多數是開發Web項目,由于一般是開發內部使用的業務系統,所以對于安全性一般不是看的很重,基本上由于是內網系統,一般也很少會受到攻擊,但有時候一些系統平臺,需要外網也要使用,這種情況下,各方面的安全性就要求比較高了,所以往往會交付給一些專門做安全測試的第三方機構進行測試,然后根據反饋的漏洞進行修復,如果你平常對于一些安全漏洞不夠了解,那么反饋的結果往往是很殘酷的,迫使你必須在很多細節上進行修復完善。本文主要根據本人項目的一些第三方安全測試結果,以及本人針對這些漏洞問題的修復方案,介紹在這方面的一些經驗,希望對大家有幫助。

基本上,參加的安全測試(滲透測試)的網站,可能或多或少存在下面幾個漏洞:SQL注入漏洞、跨站腳本攻擊漏洞、登陸后臺管理頁面、IIS短文件/文件夾漏洞、系統敏感信息泄露。

1、測試的步驟及內容

這些安全性測試,據了解一般是先收集數據,然后進行相關的滲透測試工作,獲取到網站或者系統的一些敏感數據,從而可能達到控制或者破壞系統的目的。

第一步是信息收集,收集如IP地址、DNS記錄、軟件版本信息、IP段等信息。可以采用方法有:

1)基本網絡信息獲取;

2)Ping目標網絡得到IP地址和TTL等信息;

3)Tcptraceroute和Traceroute 的結果;

4)Whois結果;

5)Netcraft獲取目標可能存在的域名、Web及服務器信息;

6)Curl獲取目標Web基本信息;

7)Nmap對網站進行端口掃描并判斷操作系統類型;

8)Google、Yahoo、Baidu等搜索引擎獲取目標信息;

9)FWtester 、Hping3 等工具進行防火墻規則探測;

10)其他。

第二步是進行滲透測試,根據前面獲取到的數據,進一步獲取網站敏感數據。此階段如果成功的話,可能獲得普通權限。采用方法會有有下面幾種

1)常規漏洞掃描和采用商用軟件進行檢查;

2)結合使用ISS與Nessus等商用或免費的掃描工具進行漏洞掃描;

3)采用SolarWinds對網絡設備等進行搜索發現;

4)采用Nikto、Webinspect等軟件對Web常見漏洞進行掃描;

5)采用如AppDetectiv之類的商用軟件對數據庫進行掃描分析;

6)對Web和數據庫應用進行分析;

7)采用WebProxy、SPIKEProxy、Webscarab、ParosProxy、Absinthe等工具進行分析;

8)用Ethereal抓包協助分析;

9)用Webscan、Fuzzer進行SQL注入和XSS漏洞初步分析;

10)手工檢測SQL注入和XSS漏洞;

11)采用類似OScanner的工具對數據庫進行分析;

12)基于通用設備、數據庫、操作系統和應用的攻擊;采用各種公開及私有的緩沖區溢出程序代碼,也采用諸如MetasploitFramework 之類的利用程序集合。

13)基于應用的攻擊。基于Web、數據庫或特定的B/S或C/S結構的網絡應用程序存在的弱點進行攻擊。

14)口令猜解技術。進行口令猜解可以采用 X-Scan、Brutus、Hydra、溯雪等工具。

第三步就是嘗試由普通權限提升為管理員權限,獲得對系統的完全控制權。在時間許可的情況下,必要時從第一階段重新進行。采用方法

1)口令嗅探與鍵盤記錄。嗅探、鍵盤記錄、木馬等軟件,功能簡單,但要求不被防病毒軟件發覺,因此通常需要自行開發或修改。

2)口令破解。有許多著名的口令破解軟件,如 L0phtCrack、John the Ripper、Cain 等

以上一些是他們測試的步驟,不過我們不一定要關注這些過程性的東西,我們可能對他們反饋的結果更關注,因為可能會爆發很多安全漏洞等著我們去修復的。

2、SQL注入漏洞的出現和修復

1)SQL注入定義:

SQL注入攻擊是黑客對數據庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由于程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

SQL注入有時候,在地址參數輸入,或者控件輸入都有可能進行。如在鏈接后加入’號,頁面報錯,并暴露出網站的物理路徑在很多時候,很常見,當然如果關閉了Web.Config的CustomErrors的時候,可能就不會看到。

另外,Sql注入是很常見的一個攻擊,因此,如果對頁面參數的轉換或者沒有經過處理,直接把數據丟給Sql語句去執行,那么可能就會暴露敏感的信息給對方了。如下面兩個頁面可能就會被添加注入攻擊。

①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type='U' and status>0)>0 得到第一個用戶建立表的名稱,并與整數進行比較,顯然abc.asp工作異常,但在異常中卻可以發現表的名稱。假設發現的表名是xyz,則

②HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects& ... tatus>0 and name not in('xyz'))>0 可以得到第二個用戶建立的表的名稱,同理就可得到所有用建立的表的名稱。

為了屏蔽危險Sql語句的執行,可能需要對進行嚴格的轉換,例如如果是整形的,就嚴格把它轉換為整數,然后在操作,這樣可以避免一些潛在的危險,另外對構造的sql語句必須進行Sql注入語句的過濾,如我的框架(Winform開發框架、Web開發框架等)里面就內置了對這些有害的語句和符號進行清除工作,由于是在基類進行了過濾,因此基本上子類都不用關心也可以避免了這些常規的攻擊了。

  1. /// <summary> 
  2. /// 驗證是否存在注入代碼(條件語句)  
  3. /// </summary> 
  4. /// <param name="inputData"></param> 
  5. public bool HasInjectionData(string inputData)  
  6. {  
  7.     if (string.IsNullOrEmpty(inputData))  
  8.         return false;  
  9.  
  10.     //里面定義惡意字符集合  
  11.     //驗證inputData是否包含惡意集合  
  12.     if (Regex.IsMatch(inputData.ToLower(), GetRegexString()))  
  13.     {  
  14.         return true;  
  15.     }  
  16.     else  
  17.     {  
  18.         return false;  
  19.     }  
  20. }  
  21.  
  22. /// <summary> 
  23. /// 獲取正則表達式  
  24. /// </summary> 
  25. /// <returns></returns> 
  26. private static string GetRegexString()  
  27. {  
  28.     //構造SQL的注入關鍵字符  
  29.     string[] strBadChar =  
  30.     {  
  31.         //"select\\s",  
  32.         //"from\\s",  
  33.         "insert\\s",  
  34.         "delete\\s",  
  35.         "update\\s",  
  36.         "drop\\s",  
  37.         "truncate\\s",  
  38.         "exec\\s",  
  39.         "count\\(",  
  40.         "declare\\s",  
  41.         "asc\\(",  
  42.         "mid\\(",  
  43.         "char\\(",  
  44.         "net user",  
  45.         "xp_cmdshell",  
  46.         "/add\\s",  
  47.         "exec master.dbo.xp_cmdshell",  
  48.         "net localgroup administrators"  
  49.     };  
  50.  
  51.     //構造正則表達式  
  52.     string str_Regex = ".*(";  
  53.     for (int i = 0; i < strBadChar.Length - 1; i++)  
  54.     {  
  55.         str_Regex += strBadChar[i] + "|";  
  56.     }  
  57.     str_Regex += strBadChar[strBadChar.Length - 1] + ").*";  
  58.  
  59.     return str_Regex;  

上面的語句用于判別常規的Sql攻擊字符,我在數據庫操作的基類里面,只需要判別即可,如下面的一個根據條件語句查找數據庫記錄的函數。

  1. /// <summary> 
  2. /// 根據條件查詢數據庫,并返回對象集合  
  3. /// </summary> 
  4. /// <param name="condition">查詢的條件</param> 
  5. /// <param name="orderBy">自定義排序語句,如Order By Name Desc;如不指定,則使用默認排序</param> 
  6. /// <param name="paramList">參數列表</param> 
  7. /// <returns>指定對象的集合</returns> 
  8. public virtual List<T> Find(string condition, string orderBy, IDbDataParameter[] paramList)  
  9. {  
  10.     if (HasInjectionData(condition))  
  11.     {  
  12.         LogTextHelper.Error(string.Format("檢測出SQL注入的惡意數據, {0}", condition));  
  13.         throw new Exception("檢測出SQL注入的惡意數據");  
  14.     }  
  15.  
  16.     ...........................  

以上只是防止Sql攻擊的一個方面,還有就是堅持使用參數化的方式進行賦值,這樣很大程度上減少可能受到SQL注入攻擊。

  1. Database db = CreateDatabase();  
  2. DbCommand command = db.GetSqlStringCommand(sql);  
  3. command.Parameters.AddRange(param); 

#p#

3、跨站腳本攻擊漏洞出現和修復

跨站腳本攻擊,又稱XSS代碼攻擊,也是一種常見的腳本注入攻擊。例如在下面的界面上,很多輸入框是可以隨意輸入內容的,特別是一些文本編輯框里面,可以輸入例如<script>alert('這是一個頁面彈出警告');</script>這樣的內容,如果在一些首頁出現很多這樣內容,而又不經過處理,那么頁面就不斷的彈框,更有甚者,在里面執行一個無限循環的腳本函數,直到頁面耗盡資源為止,類似這樣的攻擊都是很常見的,所以我們如果是在外網或者很有危險的網絡上發布程序,一般都需要對這些問題進行修復。

XSS代碼攻擊還可能會竊取或操縱客戶會話和 Cookie,它們可能用于模仿合法用戶,從而使黑客能夠以該用戶身份查看或變更用戶記錄以及執行事務。

[建議措施]

清理用戶輸入,并過濾出 JavaScript 代碼。我們建議您過濾下列字符:

[1] <>(尖括號)

[2] "(引號)

[3] '(單引號)

[4] %(百分比符號)

[5] ;(分號)

[6] ()(括號)

[7] &(& 符號)

[8] +(加號)

為了避免上述的XSS代碼攻擊,解決辦法是可以使用HttpUitility的HtmlEncode或者最好使用微軟發布的AntiXSSLibrary進行處理,這個更安全。

微軟反跨站腳本庫(AntiXSSLibrary)是一種編碼庫,旨在幫助保護開發人員保護他們的基于Web的應用不被XSS攻擊。 

編碼方法

使用場景

示例

HtmlEncode(String)

不受信任的HTML代碼。 <a href=”http://www.cnblogs.com”>Click Here [不受信任的輸入]</a>
HtmlAttributeEncode(String)

 

不受信任的HTML屬性

<hr noshade size=[不受信任的輸入]>

JavaScriptEncode(String)

不受信任的輸入在JavaScript中使用

<script type=”text/javascript”>

[Untrusted input]

</script>

UrlEncode(String)

 

不受信任的URL

<a href=”http://cnblogs.com/results.aspx?q=[Untrusted input]”>Cnblogs.com</a>

VisualBasicScriptEncode(String)

不受信任的輸入在VBScript中使用

<script type=”text/vbscript” language=”vbscript”>

[Untrusted input]

</script>

XmlEncode(String)

不受信任的輸入用于XML輸出

<xml_tag>[Untrusted input]</xml_tag>

XmlAttributeEncode(String)

 

不 受信任的輸入用作XML屬性

<xml_tag attribute=[Untrusted input]>Some Text</xml_tag>

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     this.lblName.Text = Encoder.HtmlEncode("<script>alert('OK');</SCRIPT>");  

例如上面的內容,賦值給一個Lable控件,不會出現彈框的操作。

但是,我們雖然顯示的時候設置了轉義,輸入如果要限制它們怎么辦呢,也是使用AntiXSSLibrary里面的HtmlSanitizationLibrary類庫Sanitizer.GetSafeHtmlFragment即可。

  1. protected void btnPost_Click(object sender, EventArgs e)  
  2. {  
  3.     this.lblName.Text = Sanitizer.GetSafeHtmlFragment(txtName.Text);  

這樣對于特殊腳本的內容,會自動剔除過濾,而不會記錄了,從而達到我們想要的目的。

4、IIS短文件/文件夾漏洞出現和修復

通過猜解,可能會得出一些重要的網頁文件地址,如可能在/Pages/Security/下存在UserList.aspx和MenuList.aspx文件

[建議措施]

1)禁止url中使用“~”或它的Unicode編碼。

2)關閉windows的8.3格式功能。

修復可以參考下面的做法,或者找相關運維部門進行處理即可。

http://sebug.net/vuldb/ssvid-60252

http://webscan.360.cn/vul/view/vulid/1020

http://www.bitscn.com/network/security/200607/36285.html

5、系統敏感信息泄露出現和修復

如果頁面繼承一般的page,而沒有進行Session判斷,那么可能會被攻擊者獲取到頁面地址,進而獲取到例如用戶名等重要數據的。

一般避免這種方式是對于一些需要登錄才能訪問到的頁面,一定要進行Session判斷,可能很容易給漏掉了。如我在Web框架里面,就是繼承一個BasePage,BasePage 統一對頁面進行一個登錄判斷。

  1. public partial class UserList : BasePage  
  2. {  
  3.     protected void Page_Load(object sender, EventArgs e)  
  4.     {  
  5.       ............... 
  1. /// <summary> 
  2.     /// BasePage 集成自權限基礎抽象類FPage,其他頁面則集成自BasePage  
  3.     /// </summary> 
  4.     public class BasePage : FPage  
  5.     {  
  6.         /// <summary> 
  7.         /// 默認構造函數  
  8.         /// </summary> 
  9.         public BasePage()  
  10.         {  
  11.             this.IsFunctionControl = true;//默認頁面啟動權限認證  
  12.         }  
  13.  
  14.         /// <summary> 
  15.         /// 檢查用戶是否登錄  
  16.         /// </summary> 
  17.         private void CheckLogin()  
  18.         {  
  19.             if (string.IsNullOrEmpty(Permission.Identity))  
  20.             {  
  21.                 string url = string.Format("{0}/Pages/CommonPage/Login.aspx?userRequest={1}",  
  22.                     Request.ApplicationPath.TrimEnd('/'), HttpUtility.UrlEncode(Request.Url.ToString()));  
  23.                 Response.Redirect(url);  
  24.             }  
  25.         }  
  26.  
  27.         /// <summary> 
  28.         /// 覆蓋HasFunction方法以使權限類判斷是否具有某功能點的權限  
  29.         /// </summary> 
  30.         /// <param name="functionId"></param> 
  31.         /// <returns></returns> 
  32.         protected override bool HasFunction(string functionId)  
  33.         {  
  34.             CheckLogin();  
  35.  
  36.             bool breturn = false;  
  37.             try  
  38.             {  
  39.                 breturn = Permission.HasFunction(functionId);  
  40.             }  
  41.             catch (Exception)  
  42.             {  
  43.                 Helper.Alerts(this, "BasePage調用權限系統的HasFunction函數出錯");  
  44.             }  
  45.             return breturn;  
  46.         }  
  47.  
  48.         protected override void OnInit(EventArgs e)  
  49.         {  
  50.             Response.Cache.SetNoStore(); //清除緩存  
  51.             base.OnInit(e);  
  52.  
  53.             CheckLogin();  
  54.         } 

否則可能會受到攻擊,并通過抓包軟件發現頁面數據,獲得一些重要的用戶名或者相關信息。

還有一個值得注意的地方,就是一般這種不是很安全的網絡,最好要求輸入比較復雜一點的密碼(強制要求),例如不能全部是數字密碼或者不能是純字符,對位數也要求多一點,因為很多人輸入12345678,123456,123這樣的密碼,很容易被猜出來并登錄系統,造成不必要的損失。

6、總結性建議

針對上面發現的問題,提出下面幾條建議。

1)在服務器與網絡的接口處配置防火墻,用于阻斷外界用戶對服務器的掃描和探測。

2)限制網站后臺訪問權限,如:禁止公網IP訪問后臺;禁止服務員使用弱口令。

3)對用戶輸入的數據進行全面安全檢查或過濾,尤其注意檢查是否包含SQL 或XSS特殊字符。這些檢查或過濾必須在服務器端完成。

4)關閉windows的8.3格式功能。

5)限制敏感頁面或目錄的訪問權限。

原文鏈接:http://www.cnblogs.com/wuhuacong/archive/2013/04/15/3022011.html

責任編輯:張偉 來源: 博客園
相關推薦

2014-04-23 10:29:57

2013-06-20 09:14:43

2013-07-24 19:15:01

Android開發學習Android Git代碼沖突解決方法

2012-08-15 14:01:18

2010-03-25 10:06:57

CentOS配置

2012-03-09 10:27:37

Java

2009-11-12 17:08:08

2019-06-18 07:12:25

驗證碼漏洞加密

2011-05-06 17:25:58

硒鼓

2013-04-10 15:30:42

2010-02-24 16:30:52

WCF常見錯誤

2011-04-29 13:22:48

ThinkPad筆記本故障

2019-11-21 16:26:44

Windows電腦瀏覽器

2009-09-07 18:40:28

PHP中文亂碼

2011-06-16 10:27:55

.NET內存泄漏

2009-12-14 11:06:18

2009-11-30 10:49:18

2022-04-06 10:09:17

云服務云計算

2011-03-30 12:55:51

EclipseADTAndroid

2012-03-21 10:16:31

JavaJSP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人叉 | 国产欧美日韩在线 | 黄色一级视频免费 | 欧美色成人 | 久色视频在线观看 | 天天拍天天操 | 国产精品视频在线观看 | 欧美激情一区 | 欧美一级视频免费看 | 欧美黄色大片在线观看 | 久久精品91久久久久久再现 | 亚洲乱码一区二区三区在线观看 | 国产精品视频久久久久 | 国产精品国产亚洲精品看不卡15 | 国产一区亚洲 | 国产精品视频免费观看 | 日一区二区 | 欧美日韩亚洲三区 | 国产精品国产三级国产aⅴ原创 | 日韩色在线 | 国产高清免费 | 99久9| 亚洲第一视频网 | 精品久久九九 | 国产精品美女久久久久aⅴ国产馆 | www97影院| 欧美日韩精品一区 | 91视频在线 | www.黄网| 国产女人叫床高潮大片免费 | 欧美aaaaaaaaaa| 99视频在线 | 日韩欧美天堂 | 一区二区在线观看免费视频 | 亚洲手机视频在线 | 欧美日产国产成人免费图片 | 蜜桃五月天 | 在线观看特色大片免费网站 | 国产精品久久久久久久久久 | 国产精品久久久久久久久久三级 | 精品免费国产视频 |