掃描二維碼關注

首頁 APP開(kāi)發小(xiǎo)程序開(kāi)發 微信公衆号 網站建設 營銷推廣 經典案列 産品服務 關于我們

“學習(xí)不僅是掌握知識”

向書(shū)本學習(xí),還要向實踐學習(xí)、向生活學習(xí)。消化已有(yǒu)知識,
而且要力求有(yǒu)所發現、有(yǒu)所發明(míng)、有(yǒu)所創造

五種常見的(de)ASP.NET應用(yòng)程序安全缺陷

2019/3/13 16:48:37

五種常見的(de)ASP.NET應用(yòng)程序安全缺陷

一、不能(néng)盲目相(xiàng)信用(yòng)戶輸入
    在Web應用(yòng)開(kāi)發中,程序員最大(dà)的(de)失誤往往是無條件(jiàn)地(dì)信任用(yòng)戶輸入,假定用(yòng)戶(即使是惡意用(yòng)戶)總是受到(dào)浏覽器(qì)的(de)限制(zhì),總是通過浏覽器(qì)和(hé)服務器(qì)交互,從而打開(kāi)了攻擊Web應用(yòng)的(de)大(dà)門。實際上(shàng),黑(hēi)客們攻擊和(hé)操作Web網站的(de)工(gōng)具很多,根本不必局限于浏覽器(qì),從最低級的(de)字符模式的(de)原始界面(例如(rú)telnet),到(dào)CGI腳本掃描器(qì)、Web代理(lǐ)、Web應用(yòng)掃描器(qì),惡意用(yòng)戶可(kě)能(néng)采用(yòng)的(de)攻擊模式和(hé)手段很多。
因此,隻有(yǒu)嚴密地(dì)驗證用(yòng)戶輸入的(de)合法性,才能(néng)有(yǒu)效地(dì)抵抗黑(hēi)客的(de)攻擊。應用(yòng)程序可(kě)以用(yòng)多種方法(甚至是驗證範圍重疊的(de)方法)執行(xíng)驗證,例如(rú),在認可(kě)用(yòng)戶輸入之前執行(xíng)驗證,确保用(yòng)戶輸入隻包含合法的(de)字符,而且所有(yǒu)輸入域的(de)内容長度都(dōu)沒有(yǒu)超過範圍(以防範可(kě)能(néng)出現的(de)緩沖區溢出攻擊),在此基礎上(shàng)再執行(xíng)其他(tā)驗證,确保用(yòng)戶輸入的(de)數據不僅合法,而且合理(lǐ)。必要時不僅可(kě)以采取強制(zhì)性的(de)長度限制(zhì)策略,而且還可(kě)以對輸入内容按照(zhào)明(míng)确定義的(de)特征集執行(xíng)驗證。下面幾點建議将幫助你(nǐ)正确驗證用(yòng)戶輸入數據:
⑴ 始終對所有(yǒu)的(de)用(yòng)戶輸入執行(xíng)驗證,且驗證必須在一個(gè)可(kě)靠的(de)平台上(shàng)進行(xíng),應當在應用(yòng)的(de)多個(gè)層上(shàng)進行(xíng)。
⑵ 除了輸入、輸出功能(néng)必需的(de)數據之外,不要允許其他(tā)任何内容。
⑶ 設立“信任代碼基地(dì)”,允許數據進入信任環境之前執行(xíng)徹底的(de)驗證。
⑷ 登錄數據之前先檢查數據類型。
⑸ 詳盡地(dì)定義每一種數據格式,例如(rú)緩沖區長度、整數類型等。
⑹ 嚴格定義合法的(de)用(yòng)戶請求,拒絕所有(yǒu)其他(tā)請求。
⑺ 測試數據是否滿足合法的(de)條件(jiàn),而不是測試不合法的(de)條件(jiàn)。這是因爲數據不合法的(de)情況很多,難以詳盡列舉。

二、五種常見的(de)ASP.NET安全缺陷
下面給出了五個(gè)例子,闡述如(rú)何按照(zhào)上(shàng)述建議增強應用(yòng)程序的(de)安全性。這些例子示範了代碼中可(kě)能(néng)出現的(de)缺陷,以及它們帶來的(de)安全風險、如(rú)何改寫最少(shǎo)的(de)代碼來有(yǒu)效地(dì)降低攻擊風險。
2.1 篡改參數
◎ 使用(yòng)ASP.NET域驗證器(qì)
盲目信任用(yòng)戶輸入是保障Web應用(yòng)安全的(de)第一敵人(rén)。用(yòng)戶輸入的(de)主要來源是HTML表單中提交的(de)參數,如(rú)果不能(néng)嚴格地(dì)驗證這些參數的(de)合法性,就有(yǒu)可(kě)能(néng)危及服務器(qì)的(de)安全。
下面的(de)C#代碼查詢後端SQL Server數據庫,假設user和(hé)password變量的(de)值直接取自用(yòng)戶輸入:
SqlDataAdapter my_query = new SqlDataAdapter(
 "SELECT * FROM accounts WHERE acc_user='" + user + "' AND acc_password='" + password, the_connection); 
從表面上(shàng)看,這幾行(xíng)代碼毫無問題,實際上(shàng)卻可(kě)能(néng)引來SQL注入式攻擊。攻擊者隻要在user輸入域中輸入“OR 1=1”,就可(kě)以順利登錄系統,或者隻要在查詢之後加上(shàng)适當的(de)調用(yòng),就可(kě)以執行(xíng)任意Shell命令:
'; EXEC master..xp_cmdshell(Oshell command here')-- 
■ 風險分(fēn)析
在編寫這幾行(xíng)代碼時,程序員無意之中作出了這樣的(de)假定:用(yòng)戶的(de)輸入内容隻包含“正常的(de)”數據——合乎人(rén)們通常習(xí)慣的(de)用(yòng)戶名字、密碼,但(dàn)不會(huì)包含引号之類的(de)特殊字符,這正是SQL注入式攻擊能(néng)夠得逞的(de)根本原因。黑(hēi)客們可(kě)以借助一些具有(yǒu)特殊含義的(de)字符改變查詢的(de)本意,進而調用(yòng)任意函數或過程。
■ 解決方案
域驗證器(qì)是一種讓ASP.NET程序員對域的(de)值實施限制(zhì)的(de)機制(zhì),例如(rú),限制(zhì)用(yòng)戶輸入的(de)域值必須匹配特定的(de)表達式。
要防止上(shàng)述攻擊行(xíng)爲得逞,第一種辦法是禁止引号之類的(de)特殊字符輸入,第二種辦法更嚴格,即限定輸入域的(de)内容必須屬于某個(gè)合法字符的(de)集合,例如(rú)“[a-zA-Z0-9]*”。
2.2 篡改參數之二
◎ 避免驗證操作的(de)漏洞
然而,僅僅爲每個(gè)輸入域引入驗證器(qì)還不能(néng)防範所有(yǒu)通過修改參數實施的(de)攻擊。在執行(xíng)數值範圍檢查之時,還要指定正确的(de)數據類型。
也(yě)就是說,在使用(yòng)ASP.NET的(de)範圍檢查控件(jiàn)時,應當根據輸入域要求的(de)數據類型指定适當的(de)Type屬性,因爲Type的(de)默認值是String。
<!-- 要求輸入值必須是1-9之間的(de)數字 -->
<asp:RangeValidator ... MinimumValue="1" MaximumValue="9" .../> 
■ 風險分(fēn)析
由于沒有(yǒu)指定Type屬性值,上(shàng)面的(de)代碼将假定輸入值的(de)類型是String,因此RangeValidator驗證器(qì)隻能(néng)确保字符串由0-9之間的(de)字符開(kāi)始,“0abcd”也(yě)會(huì)被認可(kě)。
■ 解決方案
要确保輸入值确實是整數,正确的(de)辦法是将Type屬性指定爲Integer:
<!-- 要求輸入值必須是1-9之間的(de)數字 -->
<asp:RangeValidator ... MinimumValue="1"
MaximumValue="9" Type="Integer"  
2.3 信息洩漏
◎ 讓隐藏域更加安全
在ASP.NET應用(yòng)中,幾乎所有(yǒu)HTML頁面的(de)__VIEWSTATE隐


深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04

咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967

更多可(kě)以了解的(de)信息

客戶案列
新聞資訊
資質榮譽
團隊風采
項目進度查詢

售前QQ咨詢
QQ溝通 項目QQ溝通

精銳軟件(jiàn)

Copyright© 2018-2023 深圳市無窮大軟件技術有限公司 All Rights Reserved. 京ICP證000000号 公安備案号:粵公網安備44030502009460号