보안 고려 사항 및 추적에 대한 유용한 정보
이 항목에서는 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 파일의 외부에 존재할 경우 시스템은 ConfigurationErrorsException을 throw합니다.
변경 내용은 응용 프로그램이 시작되거나 다시 시작되어야만 적용됩니다. 두 개의 특성이 모두 true로 설정된 경우에 시작 시 이벤트가 기록됩니다. logKnownPii가 true로 설정되어 있지만 enableLoggingKnownPii는 false인 경우에도 이벤트가 기록됩니다.
PII 로깅에 대한 자세한 내용은 PII Security Lockdown 샘플 참조하십시오.
컴퓨터 관리자와 응용 프로그램 배포자는 이러한 두 개의 스위치를 사용할 때 특별히 주의를 기울여야 합니다. PII 로깅을 사용하도록 설정하면 보안 키와 PII가 기록됩니다. PII 로깅을 사용하지 않도록 설정해도 중요한 데이터와 응용 프로그램별 데이터는 메시지 헤더 및 본문에 기록됩니다. 개인 정보 및 PII의 노출 방지에 대한 자세한 내용은 사용자 개인 정보(영문 페이지일 수 있음)를 참조하십시오.
또한, 연결 지향 전송에 대한 연결마다 한 번, 그리고 그렇지 않게 전송된 메시지마다 한 번 메시지 발신자의 IP 주소가 기록됩니다. 이 작업은 발신자의 동의 없이 수행됩니다. 그러나 이 로깅은 Information 또는 Verbose 추적 수준에서만 발생하며 이러한 수준은 라이브 디버깅을 제외하고 프로덕션에서 기본 추적 수준 또는 권장 추적 수준이 아닙니다.