Microsoft 安全性規則程式碼分析規則集
您應包含「Microsoft 安全性規則」規則集,讓回報的潛在安全性問題數目達到最大。
規則 |
說明 |
---|---|
當完全信任的組件中出現 APTCA (AllowPartiallyTrustedCallers) 屬性,並且組件在不允許部分信任呼叫端的另一個組件中執行程式碼時,可能會發生安全性弱點攻擊。 |
|
當完全信任的組件中出現 APTCA (AllowPartiallyTrustedCallers) 屬性,並且組件中的型別會繼承自不允許部分信任之呼叫端的型別時,就可能會發生安全性弱點攻擊。 |
|
當您將唯讀 (在 Visual Basic 中為 ReadOnly) 修飾詞套用至包含陣列的欄位時,欄位就不能變更為參考不同的陣列。 但是,儲存在唯讀欄位的陣列元素則可以變更。 |
|
強式名稱可避免用戶端在不知情的狀況下,載入已遭他人修改的組件。 除了極少數的案例以外,您都應該避免部署沒有強式名稱的組件。 如果您共用或散發未正確簽署的組件,表示這個組件或許已遭他人修改,Common Language Runtime 可能不會載入組件,或是使用者可能必須停用電腦上的驗證作業。 |
|
此規則所偵測的錯誤,可能是因為在 Unmanaged 程式碼仍在使用 Unmanaged 資源時,就完成 Unmanaged 資源所致。 |
|
組件中不是以 RuntimeCompatibilityAttribute 標記或是以 RuntimeCompatibility(WrapNonExceptionThrows = false) 標記的成員包含處理 System.Exception 的 catch 區塊,同時不包含緊接其後的一般 catch 區塊。 |
|
外部可見型別包含了可變動參考型別的外部可見唯讀欄位。 可變動型別是可以修改執行個體 (Instance) 資料的型別。 |
|
公用或受保護的成員具有連結要求,而且是由未執行任何安全性檢查的成員所呼叫。 連結要求只會檢查立即呼叫端的使用權限。 |
|
方法不應該同時具有相同動作的方法層級和型別層級宣告式安全性。 |
|
這項規則會使方法符合它的基底方法,即另一個型別中的介面或虛擬方法,然後比較每個方法上的連結要求。 如果違反這項規則,則惡意呼叫端只需呼叫不安全的方法,就可以略過連結要求。 |
|
指標不為私用、內部或唯讀。 惡意的程式碼可變更指標值,進而可能會允許存取記憶體中的任意位置,或是造成應用程式或系統失敗。 |
|
公用或受保護的實值型別受到資料存取或連結要求保護。 |
|
只有相當了解 .NET Framework 安全性的人員才能執行 PermitOnly 方法和 CodeAccessPermission.Deny 安全性動作。 而使用這些安全性動作的程式碼應該接受安全性檢閱。 |
|
方法會使用命令式安全性,而且可能會利用因要求正在使用中而可能變更的狀態資訊或傳回值建構使用權限。 請盡可能使用宣告式安全性。 |
|
方法會使用透過字串引數所建置的字串,將 System.Data.IDbCommand.CommandText 屬性設定為方法。 這項規則假設字串引數包含使用者輸入。 從使用者輸入所建置的 SQL 命令字串很容易遭到 SQL 插入 (SQL Injection) 攻擊。 |
|
對於執行使用 COM Interop 或平台引動過程之 Unmanaged 程式碼的成員,SuppressUnmanagedCodeSecurityAttribute 會變更安全性系統的預設行為。 這個屬性主要是用於增加效能,不過,效能提升會伴隨顯著的安全性風險。 |
|
偵測到公用或保護的事件處理方法。 除非有絕對的必要性,否則不應該公開 (Expose) 事件處理方法。 |
|
可繼承的公用型別會提供內部 (在 Visual Basic 中為 Friend) 介面的可覆寫方法實作。 若要修正此規則的違規情形,請避免在組件外覆寫方法。 |
|
方法會判斷提示使用權限,而且不會在呼叫端上執行安全性檢查。 判斷提示安全性權限但未執行任何安全性檢查,會在您的程式碼中留下可能遭利用的安全性弱點。 |
|
這個型別有接受 System.Runtime.Serialization.SerializationInfo 物件和 System.Runtime.Serialization.StreamingContext 物件 (序列化建構函式的簽章) 的建構函式。 這個建構函式未受到安全性檢查的保護,但型別中有一個或多個規則建構函式是受到保護的。 |
|
公用或受保護的型別包含公用欄位,而且受到連結要求保護。 如果程式碼可存取受連結要求保護的型別執行個體,則程式碼不必滿足連結要求即可存取型別的欄位。 |
|
關鍵程式碼不能出現在 100% 透明的組件中。 這項規則會分析 100% 透明組件中型別、欄位和方法層級的任何 SecurityCritical 附註。 |
|
此規則會分析完全透明或混合透明/關鍵之組件中的所有方法和型別,並將 Assert 的任何宣告式或必要用法加上旗標。 |
|
以 SecurityTransparentAttribute 標記的方法可呼叫標記為 SecurityCritical 的非公用成員。 此規則會分析混合透明/關鍵之組件中的所有方法和型別,而且如果從透明程式碼對非公用關鍵程式碼所做的任何呼叫未標記 SecurityTreatAsSafe,也會將這些呼叫加上旗標。 |
|
系統會在建立型別的第一個執行個體 (Instance) 或參考任何靜態成員之前呼叫靜態建構函式。 如果靜態建構函式不是私用的,則可由系統以外的程式碼呼叫。 視建構函式中執行的作業而定,這會造成非預期的行為。 |
|
公用 unsealed 型別受到連結要求保護,並且具有可以覆寫的方法。 此型別或方法都不是以繼承要求保護的。 |
|
公用或受保護的方法包含 try/finally 區塊。 finally 區塊似乎會重設安全性狀態,而且不會封入 finally 區塊中。 |