代码访问安全性似乎被忽略

时间:2016-11-23 17:18:01

标签: c# asp.net .net security

我有WebHostBufferPolicySelector

的简单扩展程序实现
public class MyBufferPolicySelector : WebHostBufferPolicySelector
{
    private const string _STREAMING_CONTENT_IDENTIFIER = "multipart";

    public override bool UseBufferedInputStream(object hostContext)
    {
        var httpContext = hostContext as HttpContextBase;
        bool? stream = !httpContext?.Request.ContentType.StartsWith(_STREAMING_CONTENT_IDENTIFIER);
        return stream.HasValue ? stream.Value : true;
    }
}

但是当这个dll试图在运行时加载时,我看到了以下错误

  

重写成员时违反了继承安全规则:'System.Web.Http.WebHost.WebHostBufferPolicySelector.UseBufferedInputStream(System.Object)'。覆盖方法的安全性可访问性必须与要覆盖的方法的安全性可访问性相匹配。

好的,非常清楚,让我们深入研究Code Access Security的东西(我在.NET 4.5上)。

据我所知(根据其元数据),WebHostBufferPolicySelector及其成员透明

我尝试过的事情:

  • 使用 SecurityCritical
  • 解析我的实施及其成员
  • 使用 SecuritySafeCritical
  • 装饰我的实施及其成员
  • 使用 [assembly> SecurityRules(SecurityRuleSet.Level2)]
  • 装饰我的实现所在的程序集
  • 使用 [assembly> SecurityRules(SecurityRuleSet.Level1)]
  • 装饰我的实现所在的程序集
  • (在黑暗中拍摄)实施其他成员UseBufferedResponseStream
  • (在黑暗中拍摄)删除除了调用base.RelevantMember
  • 的shell实现之外的所有实现

无论如何,我都会收到相同的错误消息。

我还能检查什么?

更新:尝试[assembly: System.Security.AllowPartiallyTrustedCallers]让我遇到了UseBufferedInputStream的安全问题,但我仍然在此程序集中的其他类上遇到相同的错误消息,源自System.Exception

更多情境

可能相关的一些事情,但我不确定如何排除它们:

  • 这发生在ASP.NET Application_Start
  • 在调用System.Web.Mvc.DefaultControllerFactory
  • 时构建Ninject.IKernel.Load(<dll containing *MyBufferPolicySelector*>)时发生错误

参考文献(其中包括):

0 个答案:

没有答案