다음을 통해 공유


이제 LDAP DirectoryControl 구문 분석이 더 엄격해졌습니다.

이전에는 .NET에서 System.DirectoryServices.Protocols.BerConverter 사용하여 네트워크를 통해 받은 System.DirectoryServices.Protocols.DirectoryControl 개체를 구문 분석하고 보낸 System.DirectoryServices.Protocols.DirectoryControl 바이트 배열을 생성했습니다. System.DirectoryServices.Protocols.BerConverter OS별 BER 구문 분석 기능을 사용했습니다. 이 구문 분석 기능은 이제 관리 코드에서 구현됩니다.

이전 동작

System.DirectoryServices.Protocols.BerConverter을 사용한 결과, System.DirectoryServices.Protocols.DirectoryControl 개체의 구문 분석이 꽤 느슨했습니다.

  • 각 값의 ASN.1 태그가 확인되지 않았습니다.
  • 구문 분석된 DirectoryControl의 끝 이후의 후행 데이터는 ASN.1 SEQUENCE 내의 후행 데이터와 마찬가지로 무시되었습니다.
  • Linux에서 부모 시퀀스의 끝을 넘어 확장된 OCTET STRING 길이는 부모 시퀀스 외부의 데이터를 반환했습니다.
  • 이전 버전의 Windows에서는 빈 문자열이 아닌 길이가 0인 OCTET STRING이 null 반환되었습니다.
  • System.DirectoryServices.Protocols.DirectoryControl 내용을 UTF-8로 인코딩된 문자열로 읽을 때, 유효하지 않은 UTF-8 시퀀스에서 예외가 발생하지 않았습니다.
  • 잘못된 UTF8 문자열을 VlvRequestControl생성자에 전달할 때 예외가 throw되지 않았습니다.

호환성이 손상되는 변경은 아니지만 Windows는 항상 4바이트 길이로 ASN.1 태그를 인코딩하고 Linux는 태그 길이에 필요한 만큼만 사용했습니다. 두 표현 모두 유효했지만 플랫폼 간의 이러한 동작 차이는 이제 사라졌습니다. 이제 Linux 동작도 Windows에 표시됩니다.

새 동작

DirectoryControl 구문 분석이 훨씬 더 엄격해졌으며 이제 플랫폼 및 버전 간에 일관됩니다.

  • ASN.1 태그가 이제 검사됩니다.
  • 후행 데이터는 더 이상 허용되지 않습니다.
  • 이제 OCTET STRING의 길이와 SEQUENCE의 길이가 검사됩니다.
  • 이제 길이가 0인 OCTET STRING항상 빈 문자열을 반환합니다.
  • 서버가 잘못된 UTF8 바이트 시퀀스를 보내는 경우 System.DirectoryServices.Protocols.DirectoryControl 구문 분석 논리는 이제 잘못된 문자를 알려진 값으로 자동으로 대체하지 않고 예외를 throw합니다.

또한 VlvRequestControl 생성자를 호출할 때 오류를 보다 철저하게 검사합니다. 이제 UTF8 값으로 인코딩할 수 없는 문자열을 전달하면 EncoderFallbackExceptionthrow됩니다.

도입된 버전

.NET 10 미리 보기 1

호환성이 손상되는 변경 유형

이 변경은 행동 변화입니다.

변경 이유

RFC 및 사양 준수를 위해 변경되었습니다. MS-ADTS의 다양한 RFC 및 섹션에서 controlValue는 다음과 유사한 문구가 있는 ASN.1 구조체의 BER 인코딩으로 지정됩니다(RFC2891, 섹션 1.2).

controlType은 "1.2.840.113556.1.4.474"로 설정됩니다. 중요도는 FALSE입니다(존재하지 않을 수 있음). controlValue는 OCTET STRING이며, 이 값은 다음 SEQUENCE의 값을 BER로 인코딩한 것입니다.

그러면 후행 데이터가 제외됩니다. 또한 ASN.1 태그가 다른 ASN.1 구조체의 BER 인코딩과 잘못된 BER 인코딩(예: 포함하는 SEQUENCE보다 긴 OCTET STRING)도 배제합니다.

VlvRequestControl 생성자의 경우 예외를 일찍 throw하면 사용자가 명시적으로 지정한 값만 서버로 전송된다는 것을 신뢰할 수 있습니다. 유효한 UTF8 바이트로 인코딩할 수 없는 문자열을 전달했기 때문에 실수로 서버에 EF BF BD 보낼 수 있는 상황은 없습니다.

서버는 RFC 및 사양을 준수해야 합니다. EncoderFallbackException을 처리할 때 VlvRequestControl 생성자를 호출해야 합니다.

영향을 받는 API