簡體   English   中英

代碼分析期間的LinkDemand警告。 錯誤CA2122

[英]LinkDemand warning during code analysis. Error CA2122

我剛剛在一個正在處理的項目上運行代碼分析,並且收到有關此消息的警報。

警告17 CA2122:Microsoft.Security:“ Quantizer.Quantize(Image)”調用具有鏈接需求的“ Bitmap.LockBits(Rectangle,ImageLockMode,PixelFormat)”。 通過進行此調用,“ Bitmap.LockBits(Rectangle,ImageLockMode,PixelFormat)”間接暴露給用戶代碼。 查看以下調用堆棧,這些調用堆棧可能提供一種規避安全保護的方法:
->'量化器。量化(圖像)'->'量化器。量化(圖像)'->'圖像工廠.SaveFileAndReset(字符串)'->'圖像工廠。保存(字符串)'

    private void SaveFileAndReset(string path)
    {
        // Fix the colour palette of gif images.
        if (this.imageFormat == ImageFormat.Gif)
        {
            OctreeQuantizer quantizer = new OctreeQuantizer(255, 8);
            this.Image = quantizer.Quantize(this.Image);
        }

        /// etc....

我在MSDN上可以找到的信息非常簡短,我無法從中提取任何特別有意義的信息,而且我在網上找到的大多數答案都只是建議將帶有標志的警告轉開,這顯然是我絕對不想做的事情確保我這樣做是安全的。

有人可以解釋一下這實際上意味着什么,以及我將如何解決引發警告的任何安全問題?

看來您可能在規則中遇到了誤報,該規則似乎無法正確說明.NET 4.0下的默認安全透明設置。 為避免此問題,您可以通過向包含ImageFactory和OctreeQuantizer的程序集添加以下兩個程序集級屬性,來簡單地使默認透明性明確化:

[assembly: SecurityCritical]
[assembly: SecurityRules(SecurityRuleSet.Level2)]

由於這些與CLR 4.0的默認值匹配,因此添加屬性不會影響代碼的運行時行為。 但是,屬性的​​存在將使CA2122規則能夠識別出要檢測的問題實際上並未出現在您的代碼中。

如果您想了解有關透明度模型和安全規則級別的更多信息,請參閱http://blogs.msdn.com/b/shawnfa/archive/2009/11/03/transparency-101-basic-transparency-rules。 aspxhttp://blogs.msdn.com/b/shawnfa/archive/2009/11/09/transparency-as-enforcement-in-clr-v4.aspxhttp://blogs.msdn.com/b /shawnfa/archive/2009/11/12/differences-between-the-security-rule-sets.aspx

為了避免這種fxCop-error務必記它包含了該方法的范圍Bitmap.LockBits(..)調用,所有與上游來電private和案例從另一個類調用internal ,而不是public

換句話說,請確保永遠不會發生來自程序集外部的調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM