Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 C中可序列化方法中的SecurityPermission#_C# 4.0_Serialization_Attributes - Fatal编程技术网

C# 4.0 C中可序列化方法中的SecurityPermission#

C# 4.0 C中可序列化方法中的SecurityPermission#,c#-4.0,serialization,attributes,C# 4.0,Serialization,Attributes,在可序列化类中使用SecurityPermission的重要性是什么 在[Microsoft's Site][1]上的一篇文章中,他们建议您编写一个可序列化的类,如下所示: [Serializable] public class PleaseSaveMe : ISerializable { public readonly int Age; public readonly string Name; public int KarateSkills; public P

在可序列化类中使用SecurityPermission的重要性是什么

在[Microsoft's Site][1]上的一篇文章中,他们建议您编写一个可序列化的类,如下所示:

[Serializable]
public class PleaseSaveMe : ISerializable
{
    public readonly int Age;
    public readonly string Name;
    public int KarateSkills;

    public PleaseSaveMe(int Age, string Name)
    {
        this.Age  = Age;
        this.Name = Name;
    }

    // Serialization Methods
    protected PleaseSaveMe(SerializationInfo info, StreamingContext context)
    {
        Age = info.GetInt32("Age");
        Name = info.GetString("Name");
        KarateSkills = info.GetInt32("KarateSkills");
    }

    [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Age", Age);
        info.AddValue("Name", Name);
        info.AddValue("KarateSkills", KarateSkills);
    }
}
但是在SecurityAction.LinkDemand的文档中,它特别指出不要在.NET 4.0中使用它(我正在使用它)。我应该用什么来代替?这个属性有必要吗


William

好吧,使用[Serializable]属性,您可以显式地允许代码干扰您的私有部分。如果没有security属性,进程中运行的任何代码都可以创建类的实例,该实例可以从序列化代码不一定保存的数据中进行反序列化。可能正在创建类的对象,该对象处于不一致的状态,因此可能会被利用

使用该属性,可以显式拒绝您不太信任的代码。这当然是件好事


是的,CAS在.NET4中被弃用了,主要是因为很多程序员都有像你这样的基本问题。CAS肯定很难理解,而难以理解的安全性通常是不安全的。它被沙箱模型(MSDN文章)所取代。一篇背景杂志文章。通常,只有当您允许在流程中加载来自您无法控制或信任的源的代码时,您才会担心这一点。请考虑插件或程序集的存储位置安全性不足。

感谢您简洁易懂的回答。我可以看到其他人以一种更加模糊的方式回答!你让我在“弄乱你的私密部分”中受苦+1.