추적을 위한 보안 문제 및 유용한 팁
이 항목에서는 WebHost를 사용할 때 유용한 팁뿐만 아니라 중요한 정보가 노출되지 않도록 보호하는 방법에 대해 설명합니다.
WebHost에서 사용자 지정 추적 수신기 사용
사용자 고유의 추적 수신기를 작성하는 경우 웹 호스팅 서비스의 경우 추적이 손실될 가능성을 알고 있어야 합니다. WebHost가 재시작되면, 복제된 프로세스가 인계받는 동안 라이브 프로세스가 종료됩니다. 그러나 두 프로세스는 수신기 유형에 따라 달라지는 동일한 리소스에 대한 액세스 권한이 일정 시간 동안 계속 있어야 합니다. 이 경우, XmlWriterTraceListener
은 두 번째 프로세스에 대한 새 추적 파일을 만들고, 반면 Windows 이벤트 추적은 동일한 세션 내에서 여러 프로세스를 관리하며 동일한 파일에 대한 액세스를 제공합니다. 사용자 고유의 수신기가 유사한 기능을 제공하지 않는 경우 두 프로세스에 의해 파일이 잠겨 있을 때 추적이 손실될 수 있습니다.
또한 사용자 지정 추적 수신기는 원격 데이터베이스와 같이 유선에서 추적 및 메시지를 보낼 수 있다는 점에 유의해야 합니다. 애플리케이션 배포자는 적절한 액세스 제어를 사용하여 사용자 지정 수신기를 구성해야 합니다. 또한 원격 위치에 노출될 수 있는 모든 개인 정보에 보안 제어를 적용해야 합니다.
중요한 정보 로깅
추적에는 메시지가 범위 내에 있을 때 메시지 헤더가 포함됩니다. 추적을 사용하도록 설정하면 애플리케이션별 헤더의 개인 정보(예: 쿼리 문자열) 신용 카드 번호와 같은 신체 정보가 로그에 표시될 수 있습니다. 애플리케이션 배포자는 구성 및 추적 파일에 대한 액세스 제어를 적용해야 합니다. 이러한 종류의 정보를 표시하지 않으려면 추적을 사용하지 않도록 설정하거나 추적 로그를 공유하려는 경우 데이터의 일부를 필터링해야 합니다.
다음 팁은 추적 파일의 콘텐츠가 의도치 않게 노출되지 않도록 방지하는 데 도움이 될 수 있습니다.
WebHost 및 자체 호스트 시나리오에서 로그 파일이 ACL(액세스 제어 목록)에 의해 보호되는지 확인합니다.
웹 요청을 사용하여 쉽게 처리할 수 없는 파일 확장자를 선택합니다. 예를 들어 .xml 파일 확장명은 안전한 선택이 아닙니다. IIS 관리 가이드를 확인하여 제공될 수 있는 확장 목록을 확인할 수 있습니다.
웹 브라우저를 사용하여 외부 당사자가 액세스할 수 없도록 WebHost vroot 공용 디렉터리 외부에 있어야 하는 로그 파일 위치에 대한 절대 경로를 지정합니다.
기본적으로 키와 PII(개인 식별 정보)(예: 사용자 이름 및 암호)는 추적 및 기록된 메시지에 기록되지 않습니다. 그러나 컴퓨터 관리자는 Machine.config 파일의 machineSettings
요소에 enableLoggingKnownPII
특성을 사용하여 컴퓨터에서 실행 중인 애플리케이션이 다음과 같이 알려진 PII(개인 식별 정보)를 기록하도록 허용할 수 있습니다.
<configuration>
<system.ServiceModel>
<machineSettings enableLoggingKnownPii="Boolean"/>
</system.ServiceModel>
</configuration>
그런 다음 애플리케이션 배포자는 App.config 또는 Web.config 파일에서 logKnownPii
특성을 사용하여 다음과 같이 PII 로깅을 사용하도록 설정할 수 있습니다.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="true">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
두 설정이 모두 true
경우에만 PII 로깅을 사용할 수 있습니다. 두 스위치를 조합하면 각 애플리케이션에 대해 알려진 PII를 유연하게 기록할 수 있습니다.
구성 파일에서 두 개 이상의 사용자 지정 원본을 지정하는 경우 첫 번째 원본의 특성만 읽습니다. 다른 항목은 무시됩니다. 즉, 다음 App.config파일의 경우 PII 로깅이 두 번째 원본에 대해 명시적으로 사용하도록 설정되어 있더라도 두 원본 모두에 대해 PII가 기록되지 않습니다.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="false">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
<source name="System.ServiceModel"
logKnownPii="true">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
</system.diagnostics>
<machineSettings enableLoggingKnownPii="Boolean"/>
요소가 Machine.config 파일 외부에 있으면 시스템에서 ConfigurationErrorsExceptionthrow합니다.
변경 내용은 애플리케이션이 시작되거나 다시 시작될 때만 적용됩니다. 두 특성이 모두 true
설정되면 시작 시 이벤트가 기록됩니다.
logKnownPii
가 true
로 설정되었지만 enableLoggingKnownPii
가 false
인 경우에도 이벤트가 기록됩니다.
PII 로깅에 대한 자세한 내용은 PII 보안 잠금 샘플을 참조하세요.
컴퓨터 관리자와 애플리케이션 배포자는 이러한 두 스위치를 사용할 때 매우 주의해야 합니다. PII 로깅을 사용하도록 설정하면 보안 키와 PII가 기록됩니다. 이 기능을 사용하지 않도록 설정하면 중요한 데이터와 애플리케이션별 데이터가 메시지 헤더 및 본문에 계속 기록됩니다. 개인 정보 보호 및 PII 노출 방지에 대한 자세한 내용은 사용자 개인 정보 보호참조하세요.
또한 메시지 보낸 사람의 IP 주소는 연결 지향 전송을 위해 연결당 한 번 기록되고, 그렇지 않으면 전송된 메시지당 한 번 기록됩니다. 이 작업은 보낸 사람의 동의 없이 수행됩니다. 그러나 이 로깅은 라이브 디버깅을 제외하고, 프로덕션 환경에서 기본적이거나 권장되는 추적 수준이 아닌 정보 수준 또는 자세한 정보 수준에서만 이루어집니다.