SYSLIB0001:UTF-7 編碼不安全
UTF-7 編碼已不再廣泛用於應用程式,而且許多規格現在已禁止其在交換中使用。 其也偶爾會用作非預期遇到 UTF-7 編碼資料之應用程式中的攻擊媒介。 使用 System.Text.UTF7Encoding 時 Microsoft 會發出警告,因為其不提供錯誤偵測。
因此,從 .NET 5 開始,下列 API 會標示為已淘汰。 使用這些 API 會在編譯時間產生警告 SYSLIB0001
。
- Encoding.UTF7 屬性
- UTF7Encoding 建構函式
因應措施
如果您在自己的通訊協定或檔案格式內使用 Encoding.UTF7 或 UTF7Encoding:
切換為使用 Encoding.UTF8 或 UTF8Encoding。 UTF-8 是業界標準,在語言、作業系統和執行階段之間廣受支援。 使用 UTF-8 可簡化程式碼的未來維護,並使其與生態系統的剩餘部分更容易互通。
如果您要比較 Encoding 執行個體與 Encoding.UTF7:
相反地,請考慮對已知的 UTF-7 字碼頁執行檢查,也就是
65000
。 藉由與字碼頁進行比較,您可以避免警告,同時處理某些極端案例,例如有人呼叫new UTF7Encoding()
或子類別化型別。void DoSomething(Encoding enc) { // Don't perform the check this way. // It produces a warning and misses some edge cases. if (enc == Encoding.UTF7) { // Encoding is UTF-7. } // Instead, perform the check this way. if (enc != null && enc.CodePage == 65000) { // Encoding is UTF-7. } }
隱藏警告
若您必須使用已淘汰的 API,您可以在程式碼或專案檔中隱藏警告。
若要只隱藏單一違規,請將前置處理器指示詞新增至原始程式碼檔案,以停用並重新啟用警告。
// Disable the warning.
#pragma warning disable SYSLIB0001
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0001
若要隱藏專案中的所有 SYSLIB0001
警告,請將 <NoWarn>
屬性新增至專案檔。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
</PropertyGroup>
</Project>
如需詳細資訊,請參閱隱藏警告。