![](/img/trans.png)
[英]CA2122 DoNotIndirectlyExposeMethodsWithLinkDemands
[英]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。 aspx , http://blogs.msdn.com/b/shawnfa/archive/2009/11/09/transparency-as-enforcement-in-clr-v4.aspx和http://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.