日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Web開發(fā)常見的幾個漏洞解決方法

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

公司主營業(yè)務:網(wǎng)站設計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出邳州免費做網(wǎng)站回饋大家。

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

1、測試的步驟及內(nèi)容

這些安全性測試,據(jù)了解一般是先收集數(shù)據(jù),然后進行相關(guān)的滲透測試工作,獲取到網(wǎng)站或者系統(tǒng)的一些敏感數(shù)據(jù),從而可能達到控制或者破壞系統(tǒng)的目的。

第一步是信息收集,收集如IP地址、DNS記錄、軟件版本信息、IP段等信息??梢圆捎梅椒ㄓ校?/p>

1)基本網(wǎng)絡信息獲??;

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

3)Tcptraceroute和Traceroute 的結(jié)果;

4)Whois結(jié)果;

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

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

7)Nmap對網(wǎng)站進行端口掃描并判斷操作系統(tǒng)類型;

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

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

10)其他。

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

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

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

3)采用SolarWinds對網(wǎng)絡設備等進行搜索發(fā)現(xiàn);

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

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

6)對Web和數(shù)據(jù)庫應用進行分析;

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

8)用Ethereal抓包協(xié)助分析;

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

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

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

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

13)基于應用的攻擊?;赪eb、數(shù)據(jù)庫或特定的B/S或C/S結(jié)構(gòu)的網(wǎng)絡應用程序存在的弱點進行攻擊。

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

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

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

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

以上一些是他們測試的步驟,不過我們不一定要關(guān)注這些過程性的東西,我們可能對他們反饋的結(jié)果更關(guān)注,因為可能會爆發(fā)很多安全漏洞等著我們?nèi)バ迯偷摹?/p>

2、SQL注入漏洞的出現(xiàn)和修復

 1)SQL注入定義:

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

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

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

①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type='U' and status>0)>0 得到第一個用戶建立表的名稱,并與整數(shù)進行比較,顯然abc.asp工作異常,但在異常中卻可以發(fā)現(xiàn)表的名稱。假設發(fā)現(xiàn)的表名是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語句的執(zhí)行,可能需要對進行嚴格的轉(zhuǎn)換,例如如果是整形的,就嚴格把它轉(zhuǎn)換為整數(shù),然后在操作,這樣可以避免一些潛在的危險,另外對構(gòu)造的sql語句必須進行Sql注入語句的過濾,如我的框架(Winform開發(fā)框架、Web開發(fā)框架等)里面就內(nèi)置了對這些有害的語句和符號進行清除工作,由于是在基類進行了過濾,因此基本上子類都不用關(guān)心也可以避免了這些常規(guī)的攻擊了。

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

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

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

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

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

#p#

3、跨站腳本攻擊漏洞出現(xiàn)和修復

跨站腳本攻擊,又稱XSS代碼攻擊,也是一種常見的腳本注入攻擊。例如在下面的界面上,很多輸入框是可以隨意輸入內(nèi)容的,特別是一些文本編輯框里面,可以輸入例如這樣的內(nèi)容,如果在一些首頁出現(xiàn)很多這樣內(nèi)容,而又不經(jīng)過處理,那么頁面就不斷的彈框,更有甚者,在里面執(zhí)行一個無限循環(huán)的腳本函數(shù),直到頁面耗盡資源為止,類似這樣的攻擊都是很常見的,所以我們?nèi)绻窃谕饩W(wǎng)或者很有危險的網(wǎng)絡上發(fā)布程序,一般都需要對這些問題進行修復。

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

[建議措施]

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

[1] <>(尖括號)

[2] "(引號)

[3] '(單引號)

[4] %(百分比符號)

[5] ;(分號)

[6] ()(括號)

[7] &(& 符號)

[8] +(加號)

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

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

編碼方法

使用場景

示例

HtmlEncode(String)

不受信任的HTML代碼。 Click Here [不受信任的輸入]
HtmlAttributeEncode(String)

不受信任的HTML屬性


JavaScriptEncode(String)

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

UrlEncode(String)

不受信任的URL

Cnblogs.com

VisualBasicScriptEncode(String)

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

XmlEncode(String)

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

[Untrusted input]

XmlAttributeEncode(String)

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

Some Text

        protected void Page_Load(object sender, EventArgs e)         {             this.lblName.Text = Encoder.HtmlEncode("");         }

例如上面的內(nèi)容,賦值給一個Lable控件,不會出現(xiàn)彈框的操作。

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

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

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

4、IIS短文件/文件夾漏洞出現(xiàn)和修復

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

[建議措施]

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

2)關(guān)閉windows的8.3格式功能。

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

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

http://webscan.#/vul/view/vulid/1020

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

#p#

5、系統(tǒng)敏感信息泄露出現(xiàn)和修復

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

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

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

否則可能會受到攻擊,并通過抓包軟件發(fā)現(xiàn)頁面數(shù)據(jù),獲得一些重要的用戶名或者相關(guān)信息。

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

6、總結(jié)性建議

針對上面發(fā)現(xiàn)的問題,提出下面幾條建議。

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

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

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

4)關(guān)閉windows的8.3格式功能。

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


網(wǎng)頁標題:Web開發(fā)常見的幾個漏洞解決方法
網(wǎng)頁鏈接:http://www.5511xx.com/article/cciiees.html