微软在 .NET 10 的第六个预览版中,针对库、JSON 安全性和未来密码技术做了重要更新,不管你是在处理 JSON,还是对前瞻性的密码安全感兴趣,都能在这里找到新的能力。
我们来详细拆解这三个重点更新:
什么问题?JSON 规范对重复属性名没有明确说明,所以不同解析器行为不一,容易被恶意 payload 利用,导致覆盖、数据篡改等问题 ([Medium][1])。
新特性是什么?在 JsonSerializerOptions
和 JsonDocumentOptions
中引入 AllowDuplicateProperties
标志。默认允许重复,但你可以显式设为 false
,一旦遇到重复键就抛出异常,从而增强安全一致性 ([Medium][1])。
示例:
string json = """{"Value":1,"Value":-1}""";
// 默认行为取后一个值:-1
var options = new JsonSerializerOptions { AllowDuplicateProperties = false };
// 接下来以下操作都会抛出 JsonException
JsonSerializer.Deserialize<MyRecord>(json, options);
JsonDocument.Parse(json, new JsonDocumentOptions { AllowDuplicateProperties = false });
record MyRecord(int Value);
为什么有用?默认 JSON 解析较宽松,方便快速开发。但在一些严谨场景(如财务、签名、Schema 严格验证等)下,会导致意外数据注入和解析错误 。
解决方案?新增 JsonSerializerOptions.Strict
配置,默认开启严格模式,具备以下行为:
示例:
var strictOptions = new JsonSerializerOptions(JsonSerializerDefaults.Strict);
var person = JsonSerializer.Deserialize<Person>(
"""{"Name":"Alice","Age":30}""", strictOptions);
record Person(string Name, int Age);
背景?随着量子计算日益成熟,传统 RSA 和 ECC 等算法可能在未来被破解,NIST 和行业纷纷推动 PQC 标准 ([NIST][2])。
.NET 新支持哪些算法?.NET 10 Preview 6 引入 Windows CNG 上的 PQC 支持,主要包括:
如何使用?
using System.Security.Cryptography;
bool ValidateMLDsaSignature(ReadOnlySpan<byte> data, ReadOnlySpan<byte> sig, string pubKeyPemPath)
{
string pubKeyPem = File.ReadAllText(pubKeyPemPath);
using MLDsa key = MLDsa.ImportFromPem(pubKeyPem);
return key.VerifyData(data, sig);
}
注意:目前仅在 Windows 的 Canary 渠道 / OpenSSL 3.5+ 系统上支持,还处在实验阶段 ([Microsoft Learn][3])。
.NET 10 Preview 6 不只是小幅迭代,而是为 JSON 安全与未来加密技术奠定基础:
特性 | 作用 |
---|---|
禁止重复属性 | 防止数据覆盖与恶意 payload |
Strict 模式 | 精准匹配数据、避免意外字段 |
PQC 支持 | 提早适配量子时代的加密需求 |
如果你是开发高安全性、合规性、或长期运营的应用,这些更新非常值得关注并尽快试用。准备好迎接更安全、更健壮的未来了吗?🎯
参考: [1] https://medium.com/%40gohulan/exploring-whats-new-in-net-10-preview-6-json-enhancements-post-quantum-cryptography-fb05cf2ea4d0 [2] https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards [3]https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/libraries
点击下方卡片关注DotNet NB