C# 4.0 C中可序列化方法中的SecurityPermission#
在可序列化类中使用SecurityPermission的重要性是什么 在[Microsoft's Site][1]上的一篇文章中,他们建议您编写一个可序列化的类,如下所示: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
[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.