構建安全的資料訪問 異常管理(八)

2022-07-13 23:54:20 字數 2203 閱讀 6653

異常條件可能會由配置錯誤、**中的錯誤或惡意輸入引起。如果沒有正確的異常管理,這些條件可能會透露有關資料來源位置和特性的敏感資訊,以及有價值的連線詳細資訊。下面的建議適用於資料訪問**:

•捕獲和記錄 ado.net 異常。

•確保資料庫連線總是處於斷開狀態。

•在 asp.net 應用程式中使用一般錯誤頁面。

捕獲和記錄 ado.net 異常

將資料訪問**放在try/catch塊中並處理異常。在編寫 ado.net 資料訪問**時,由 ado.net 生成的異常型別取決於資料提供程式。例如:

•sql server .net framework 資料提供程式生成sqlexception

•ole db .net framework 資料提供程式生成oledbexception

•odbc .net framework 資料提供程式生成odbcexception

捕獲異常

下面的**使用 sql server .net framework 資料提供程式,並顯示應該如何捕獲型別為sqlexception的異常。

try

catch (sqlexception sqlex) // 比較具體

catch (exception ex) // 比較一般

記錄異常

還應該記錄來自sqlexception類的詳細資訊。此類公開那些包含異常條件詳細資訊的屬性。這些屬性包括message屬性(用來描述錯誤)、number屬性(用來唯一標識錯誤型別)以及state屬性(其中包含其他資訊)。state屬性通常用來指示特定錯誤條件出現的具體位置。例如,如果某個儲存過程從多個行中生成同一錯誤,則state屬性可以指出錯誤出現的具體位置。最後,errors集合中包含sqlerror物件,這些物件提供詳細的 sql 伺服器錯誤資訊。

下面的**片斷顯示了如何通過使用 sql server .net framework 資料提供程式來處理 sql server 錯誤條件:

using system.data;

using system.data.sqlclient;

using system.diagnostics;

// 由資料訪問層 (dal) 元件公開的方法

public string getproductname( int productid )

catch (sqlexception sqlex)

finally }

// helper 例程,該例程將 sqlexception 詳細資訊記錄到

// 應用程式事件日誌中

private void logexception( sqlexception sqlex )

}

確保資料庫連線總是處於斷開狀態

如果發生異常,一定要斷開資料庫連線,並釋放其他所有受限制的資源。使用finally塊或 c#using語句,可以確保無論是否發生了異常條件,都會斷開資料庫連線。上面的**闡釋了finally塊的用法。還可以按如下方式使用 c#using語句:

using ((sqlconnection conn = new sqlconnection(connstring)))

在 asp.net 應用程式中使用一般錯誤頁面

如果您的資料訪問**由 asp.net web 應用程式或 web 服務呼叫,則應該對 <customerrors> 元素進行配置,以防異常詳細資訊傳播回到終端使用者。還可以通過使用該元素來指定一般錯誤頁面,如下所示。

對於生產伺服器設定mode="on"。只有在發布之前開發和測試軟體時才使用mode="off"。如果不這樣做,將導致向終端使用者返回大量錯誤資訊(如圖 14.4 中顯示的資訊)。這些資訊可能包含資料庫伺服器的名稱、資料庫名稱和連線憑據。

圖 14.4

詳細的異常資訊會透露敏感資料

圖 14.4 還顯示了資料訪問**中接近導致異常的行的大量漏洞。特別是:

•連線字串是硬編碼的。

•特權極高的sa帳戶用於連線到資料庫。

sa帳戶有乙個弱密碼。

•sql 命令的構造容易受到 sql 注入攻擊;輸入內容未進行驗證,**不使用引數化儲存過程。

構建安全的資料訪問 設計注意事項(二)

在開始編寫 之前,需要在設計時考慮許多重要的問題。主要的注意事項包括 使用 windows 身份驗證。使用最小特權帳戶。使用儲存過程。保護所儲存的敏感資料。使用單獨的資料訪問程式集。使用 windows 身份驗證 理想情況下,在設計中應該使用 windows 身份驗證,以增加安全性好處。使用 win...

如何構建安全的微服務應用

目錄 一 前言 二 單體應用認證和鑑權 三 微服務認證和鑑權 1 面臨的問題 2 使用者身份認證 3 使用者狀態保持 4 實現單點登入 5 使用者許可權控制 6 微服務之間的認證與鑑權 7 第三方應用 四 總結 我們知道微服務技術或微服務架構是一把雙刃劍,其給我們帶來了簡單 靈活的部署,聚焦 專注快...

基於ArcGIS構建安全的移動端App

根據平常工作中跟客戶 開發商朋友交流的情況來看,移動端的空間資訊保安 一直都是大家很關心的問題。arcgis10.1 提供更多的安全策略,更好的保護移動端的空間資訊保安。比如 1 arcgis server 提供許可權管理和令牌驗證功能,控制不同的使用者和角色訪問或者編輯 不同的地圖服務 2 arc...