共用方式為


SYSLIB0001:UTF-7 編碼不安全

UTF-7 編碼已不再廣泛用於應用程式,而且許多規格現在已禁止其在交換中使用。 其也偶爾會用作非預期遇到 UTF-7 編碼資料之應用程式中的攻擊媒介。 使用 System.Text.UTF7Encoding 時 Microsoft 會發出警告,因為其不提供錯誤偵測。

因此,從 .NET 5 開始,下列 API 會標示為已淘汰。 使用這些 API 會在編譯時間產生警告 SYSLIB0001

因應措施

  • 如果您在自己的通訊協定或檔案格式內使用 Encoding.UTF7UTF7Encoding

    切換為使用 Encoding.UTF8UTF8Encoding。 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>

如需詳細資訊,請參閱隱藏警告

另請參閱