gpt4 book ai didi

c# - Newtonsoft Json 中的 TypeName 处理注意事项

转载 作者:IT王子 更新时间:2023-10-29 04:48:23 26 4
gpt4 key购买 nike

关于 this链接,在备注部分提到:

TypeNameHandling should be used with caution when your application deserializes JSON from an external source. Incoming types should be validated with a custom SerializationBinder when deserializing with a value other than TypeNameHandling.None.

在什么情况下,如果使用 TypeNameHandling.All 序列化/反序列化来自外部源的 JSON 会有害?一个工作示例将不胜感激。

最佳答案

当使用 TypeNameHandling.All 反序列化并且没有 SerializationBinder 检查时,json.net 将尝试创建一个类型的实例,该类型作为 JSON 中的元数据出现。

public class Car
{
public string Maker { get; set; }
public string Model { get; set; }
}

{
"$type": "Car",
"Maker": "Ford",
"Model": "Explorer"
} //create a Car and set property values

但是攻击者可能会向您发送存在于您的代码或框架中的危险类型。

即来自 here System.CodeDom.Compiler.TempFileCollection 是一个可序列化的类,其目的是维护编译过程产生的临时文件列表,并在不再需要时删除它们。为了确保文件被删除,该类实现了一个终结器,当垃圾收集器清理对象时将调用该终结器。攻击者将能够构建此类的序列化版本,将其内部文件集合指向受害者系统上的任何文件。这将在反序列化后的某个时刻被删除,而无需反序列化应用程序的任何交互。

    [Serializable]
public class TempFileCollection
{
private Hashtable files;
// Other stuff...

~TempFileCollection()
{
if (KeepFiles) {return}
foreach (string file in files.Keys)
{
File.Delete(file);
}
}
}

{
"$type": "System.CodeDom.Compiler.TempFileCollection",
"BasePath": "%SYSTEMDRIVE",
"KeepFiles": "False",
"TempDir": "%SYSTEMROOT%"
} // or something like this, I just guessing but you got the idea

关于c# - Newtonsoft Json 中的 TypeName 处理注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39565954/

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