在Silverlight中使用安全关键构造函数对透明类型进行子类化的安全规则

时间:2011-07-08 16:22:55

标签: silverlight security webclient

在Silverlight(v4.0)安全模型中,Shawn Farkas says派生自类型:

  

[...]我们看到了   应用程序类型可能只来自   其他应用类型或透明   平台类型。 (*)

*部分是:

  

(*)99.9%的情况属实。关于类的默认构造函数的可见性还有另一个规则(当我们深入研究安全模型时,我们将在下周进入这个规则),这也需要基类的默认构造函数(如果它有一个),也必须透明。实际上,你通常不会在平台上找到有趣的透明类型,它们也没有透明的默认构造函数,所以这个规则通常不起作用。

然而,有一个这样有趣的透明类型,它没有透明的默认构造函数 - WebClient类。还有一个很好的理由想要将其子类化 - 覆盖GetWebRequest以提供对cookie的支持。

作为测试,我在使用和不使用构造函数属性的情况下尝试了以下内容......

public class MyWebClient : WebClient
{
    [SecuritySafeCritical] // matches the attribute on the base class ctor
    public MyWebClient() { }
}

...但无论如何都会出现以下错误:

  

覆盖成员时违反了继承安全规则:'MyWebClient..ctor()'。覆盖方法的安全性可访问性必须与要覆盖的方法的安全性可访问性相匹配。

在我看来,这是他提到的0.1%的情况。不幸的是,据我所知,接下来的帖子从来没有扩展过这里的规则。因此,我有两个问题:

  1. 有人知道0.1%的规则是什么吗?
  2. 鉴于1,是否可以从Silverlight 4中的WebClient派生出来?

1 个答案:

答案 0 :(得分:0)

我对this question的回答涵盖了你的第1部分。

2的答案根本就是否定,但就WebClient而言,如果你有理由这样做,你可以创建自己的答案。