如何避免使用反射访问类的私有成员?

塞尔曼·杨(Selman Young)

我在阅读《反射的安全注意事项》,看到以下几行:

即使代码是完全可信的,透明代码也不能使用反射来访问安全性至关重要的成员。抛出MethodAccessException,FieldAccessException或TypeAccessException。

因此,我编写了一个测试程序:

类库:

namespace ClassLibrary
{
    public class Foo
    {
        [SecurityCritical] private int X;
    }
}

测试程序:

using ClassLibrary;
namespace ReflectionSecurityTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Foo f = new Foo();
            var flags = BindingFlags.Instance | BindingFlags.NonPublic;
            var field = f.GetType().GetField("X", flags);
            field.SetValue(f,15);
            Console.WriteLine(field.GetValue(f));
        }
    }
}

我希望看到一个异常,但我会15在控制台中看到。问题是为什么我是否误解了我的意思SecurityCritical或做错了什么?

CodeCaster

下面的要点指出:

  • 部分信任运行的代码被视为透明的。

从命令行运行的应用程序代码以完全信任的方式运行。只要未将其标记为透明,它就可以使用反射来访问对安全至关重要的成员。当使用部分信任(例如,在沙盒应用程序域中)运行相同的代码时,程序集的信任级别决定了它是否可以访问安全性至关重要的代码:如果程序集具有强名称,并且安装在全局程序集缓存中,则它将是受信任的程序集,可以调用安全性至关重要的成员。如果它不受信任,则即使未标记为透明,它也将变为透明,并且无法访问对安全性要求较高的成员。

因此,请从标题中回答问题:

如何避免使用反射访问类的私有成员?

如果不能,则不能执行执行反射的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何访问对象的私有成员?

来自分类Dev

为什么使用反射访问外部类的私有成员会引发IllegalAccessException?

来自分类Dev

使用反射为私有成员设置新值

来自分类Dev

使用公共成员变量的地址访问私有成员

来自分类Dev

使用Java访问私有成员中的私有成员

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

无法从C ++中的类内部访问私有成员?

来自分类Dev

类对象不能访问其自己的私有成员?

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

如何从具有继承关系的子类中访问基类中的私有成员(C ++)

来自分类Dev

如何访问其他模板类实例的私有成员?

来自分类Dev

如何让方法访问其他模板类实例的私有成员?

来自分类Dev

如何从Swift扩展访问Objective-C类的私有成员?

来自分类Dev

类方法如何访问相同类的另一个实例的私有成员?

来自分类Dev

如何启用朋友类的朋友功能直接在C ++中访问其私有成员

来自分类Dev

C ++如何在std :: for_each内部的类中访问私有成员

来自分类Dev

如何在 JavaScript 中访问超类的私有成员?

来自分类Dev

访问使用接口实例化的类的私有成员

来自分类Dev

C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

来自分类Dev

朋友班级如何访问嵌套班级的私有成员?

来自分类Dev

如何使用私有成员 Java 创建带有子类的工作超类

来自分类Dev

通过私有成员访问同一个类的私有成员变量

来自分类Dev

C ++:访问该类的私有成员

来自分类Dev

PowerMock访问私有成员

来自分类Dev

从特权方法访问私有成员

来自分类Dev

如何从同一个类的静态函数访问一个类的私有成员?

来自分类Dev

公共类,但私有成员变量?

来自分类Dev

公共类,但私有成员变量?

来自分类Dev

对象作为类的私有成员

Related 相关文章

  1. 1

    如何访问对象的私有成员?

  2. 2

    为什么使用反射访问外部类的私有成员会引发IllegalAccessException?

  3. 3

    使用反射为私有成员设置新值

  4. 4

    使用公共成员变量的地址访问私有成员

  5. 5

    使用Java访问私有成员中的私有成员

  6. 6

    访问派生类C ++的私有成员

  7. 7

    无法从C ++中的类内部访问私有成员?

  8. 8

    类对象不能访问其自己的私有成员?

  9. 9

    访问派生类C ++的私有成员

  10. 10

    如何从具有继承关系的子类中访问基类中的私有成员(C ++)

  11. 11

    如何访问其他模板类实例的私有成员?

  12. 12

    如何让方法访问其他模板类实例的私有成员?

  13. 13

    如何从Swift扩展访问Objective-C类的私有成员?

  14. 14

    类方法如何访问相同类的另一个实例的私有成员?

  15. 15

    如何启用朋友类的朋友功能直接在C ++中访问其私有成员

  16. 16

    C ++如何在std :: for_each内部的类中访问私有成员

  17. 17

    如何在 JavaScript 中访问超类的私有成员?

  18. 18

    访问使用接口实例化的类的私有成员

  19. 19

    C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

  20. 20

    朋友班级如何访问嵌套班级的私有成员?

  21. 21

    如何使用私有成员 Java 创建带有子类的工作超类

  22. 22

    通过私有成员访问同一个类的私有成员变量

  23. 23

    C ++:访问该类的私有成员

  24. 24

    PowerMock访问私有成员

  25. 25

    从特权方法访问私有成员

  26. 26

    如何从同一个类的静态函数访问一个类的私有成员?

  27. 27

    公共类,但私有成员变量?

  28. 28

    公共类,但私有成员变量?

  29. 29

    对象作为类的私有成员

热门标签

归档