Wil*_*iam 6 serialization attributes c#-4.0
在Serializable类中使用SecurityPermission的重要性是什么?
在[微软网站] [1]上的一篇文章中,他们建议你编写一个Serializable类,如下所示:
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是在SecurityAction.LinkDemand的文档中,它特别指出不在.NET 4.0中使用它(我正在使用它).我应该用什么呢?该属性甚至是必要的吗?
威廉
好吧,使用[Serializable]属性,您明确允许代码弄乱您的私有部分.如果没有安全属性,那么在您的进程中运行的任何代码都可以创建一个类的实例,该实例是从不一定由序列化代码保存的数据反序列化的.可能会创建一个类的对象,该对象处于不一致的状态,因此可能被利用.
使用该属性,您可以明确地拒绝您不信任的代码来执行此操作.这当然是件好事.
是的,CAS在.NET 4中被弃用,主要是因为很多程序员都有像你这样的基本问题.CAS绝对难以理解,难以理解的安全性通常是不安全的.它被沙盒模型取代,MSDN文章就在这里.背景杂志文章就在这里.通常,当您允许代码加载来自您无法控制或信任的源的进程时,您只会担心这一点.考虑插件或组件不够安全的存储位置.
归档时间: |
|
查看次数: |
1502 次 |
最近记录: |