2014-09-11 3 views
2

ASP.NET 응용 프로그램에서 System.IO.Packaging.Package.Open()을 호출하고 있습니다. 또한 열려는 패키지가 안전한 위치에 저장되고이를 읽으려면 가장이 필요하기 때문에 Windows를 가장하기 전에 이것을 수행해야합니다.Package.Open 요청 된 레지스트리 액세스가 허용되지 않습니다.

Package.Open()MS.Utility.EventTrace.IsClassicETWRegistryEnabled()을 호출하여 요청 된 레지스트리 액세스의 보안 예외를 발생시키는 EventTrace.EasyTraceEvent()를 호출합니다.

Web.config에서 특히 사용할 수없는 경우에도 발생합니다. 디버그 및 릴리스 모드.

따라서 내 딜레마. 파일 (패키지)은 가장 된 계정에서만 액세스 할 수 있도록 저장되므로 가장이 필요합니다. 안전하지 않은 위치로 복사하면 보안 목적을 상실하게됩니다.

레지스트리에 대한 가장 된 계정 액세스 권한을 부여하면 다른 방향으로 보안 구멍이 열립니다. 이 계정에는 특정 파일 및 폴더 집합 이외의 다른 시스템 리소스에 대한 액세스 권한이 없으며 필요하지 않습니다.

내가 정말로 원하는 것은 EventTrace가 절벽에서 비행 도약을하는 것이지만, 그렇게하도록 지시하는 방법을 모르겠다.

아이디어가 있으십니까?

답변

1

짧은 대답 : 스트림을 사용하십시오. 가장을 수행하여 스트림을 열고 가장을 끝낸 다음 아직 열어 놓은 스트림을 Package.Open()에 전달합니다.

긴 대답 : 오류의

  • 소스는 EventTrace에 대한 정적 클래스 초기화입니다. 레지스트리를 액세스하는 IsClassicETWRegistryEnabled()를 호출합니다. 클래스 이니셜 라이저에 있기 때문에이를 비활성화 할 방법이 없으며 가장 (Impersonation)과 관련하여 EventTrace가 근본적으로 손상되었다는 것을 의미합니다.

  • Package.Open()은 실제로 "new ZipPackage()" 주위의 래퍼입니다.

  • ZipPackage는 패키지 추상 클래스의 sealed 구현입니다.

  • ZipPackage에는 공용 생성자가 없습니다.

  • ZipPackage는 ZipArchive의 내부 메서드를 사용하며 이는 MS.Internal.IO.Zip 네임 스페이스에 있으며 밀폐 된 클래스이기도합니다.

결론 :

  • System.IO.Packaging가 가장 충분한 레지스트리에 액세스 할 수 없습니다 도용에 문제가 있습니다.

  • System.IO.Packaging은 공용 Microsoft가 아닌 개인 Microsoft 네임 스페이스로 간주되어야합니다.

옵션 : 보안 영역 중

  • 이동 파일이 가장 필요하지 않습니다 그래서.

  • 가장이 필요없는 파일을로드하고 다른 방식으로 데이터를 저장하십시오 (예 : DB에 저장).

  • 가장을 사용하여 스트림을 열고 가장을 끝낸 다음 스트림에서 Package.Open()을 사용하십시오.

궁금한 점이 있으면 읽고있는 패키지는 Visio 2013 VSDX 파일입니다.

관련 문제