不要间接暴露具有链接需求的方法

时间:2017-06-12 09:25:19

标签: c# .net fxcop

我不知道如何解决我的FxCop问题。

这是我感兴趣的功能

  public void WriteLine(int eventNumber, string message,  params object[] args)
    {
        try
        {
            rwl.WaitOne();
            try
            {

                        sw.WriteLine(DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss", CultureInfo.CurrentCulture) + "\t\t" + eventNumber.ToString(CultureInfo.CurrentCulture) + "\t" + System.Reflection.Assembly.GetCallingAssembly().GetName().Name + "\t" + Process.GetCurrentProcess().Id.ToString(CultureInfo.CurrentCulture) + "\t" + tID + " \t " + message, args);                   
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Cannot write to file " + ex.Message);
            }
            finally
            {
                rwl.ReleaseMutex();
            }
        }
        catch (ApplicationException)
        {
        }
    }

这是错误: CriticalError,确定性33,适用于DoNotIndirectlyExposeMethodsWithLinkDemands   帮助:http://msdn.microsoft.com/library/ms182303(VS.100).aspx
 信息:"不要将受LinkDemand保护的方法包装起来                    一种不执行安全检查的方法。一个                    LinkDemand检查立即的权限                    调用者而不是检查所有权限                    调用堆栈中的调用者。在这种情况下,权限                    将检查包装器方法。如果包装                    方法本身不检查调用者的权限                    在调用堆栈中,恶意代码可能会更高                    执行包装函数,即使它缺乏                    允许这样做。"

1 个答案:

答案 0 :(得分:0)

rwl是[Mutex] [1]吗?如果是这样,该类将使用[HostProtectionAttribute] [2]进行修饰,以创建HostProtectionPermission的链接需求,这可能是导致规则CA2122触发的原因。

也就是说,FxCop已经特别排除了规则CA2122中的HostProtectionPermission,因为至少FxCop 10.0(因为它并不是真正的安全问题),所以你看到这个规则违规似乎有点奇怪。如果您使用旧版本的FxCop,并且您确信它是导致问题的HostProtectionAttribute,那么抑制违规似乎是非常安全的。否则,您能否提供更多详细信息(FxCop版本,Visual Studio版本,目标框架版本,swrwl类型),以便更容易识别违规原因?