gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:30:54 25 4
gpt4 key购买 nike

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

在 [Microsoft 网站][1] 上的一篇文章中,他们建议您编写一个 Serialized 类,如下所示:

[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 中使用它(这就是我正在使用的)。我应该用什么来代替?该属性是否必要?

威廉

最佳答案

好吧,使用 [Serializable] 属性,您可以明确允许代码弄乱您的私有(private)部分。如果没有安全属性,进程中运行的任何代码都可以创建类的实例,该实例是根据序列化代码不一定保存的数据进行反序列化的。可能会创建一个处于不一致状态的类对象,从而可能被利用。

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

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

关于c#-4.0 - C# 中可序列化方法中的 SecurityPermission,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com