다음을 통해 공유


SYSLIB0001: UTF-7 인코딩이 안전하지 않음

UTF-7 인코딩은 더 이상 애플리케이션에서 광범위하게 사용되지 않으며, 이제 많은 사양에서는 교환에 사용을 금지합니다. 간혹 UTF-7로 인코딩된 데이터를 기대하지 않는 애플리케이션에서 공격 벡터로 사용되기도 합니다. 오류 검색 기능이 제공되지 않기 때문에 Microsoft는 System.Text.UTF7Encoding을 사용하지 않도록 경고합니다.

따라서 다음 API는 .NET 5부터 사용되지 않는 것으로 표시됩니다. 이러한 API를 사용하면 컴파일 시간에 SYSLIB0001 경고가 생성됩니다.

해결 방법

  • 사용자 고유의 프로토콜 또는 파일 형식에서 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>

자세한 내용은 경고 표시 안 함을 참조하세요.

참고 항목