Bloqueo de seguridad PII
Este ejemplo muestra cómo controlar varias características relacionadas con la seguridad de un servicio Windows Communication Foundation (WCF) por:
Cifrado de información confidencial en el archivo de configuración de un servicio.
Encerrar los elementos en el archivo de configuración para que los subdirectorios del servicio anidados no puedan invalidar los valores.
Controlar el registro de Información de identificación personal (PII) en los registros de seguimiento y de mensajes.
Cada una de estas características puede utilizarse por separado o conjuntamente para controlar los aspectos de la seguridad de un servicio. Ésta no es una guía definitiva para proteger un servicio WCF.
Los archivos de configuración de .NET Framework pueden contener información confidencial como cadenas de conexión para conectar a las bases de datos. En escenarios compartidos hospedados por la Web puede ser deseable cifrar esta información en el archivo de configuración para un servicio, para que los datos que contiene el archivo de configuración sean resistentes a la vista casual. .La versión de .NET Framework 2.0 y posteriores tienen la capacidad de cifrar partes del archivo de configuración utilizando la interfaz del programa de aplicaciones Windows Data Protection (DPAPI) o el proveedor Criptográfico de RSA. El aspnet_regiis.exe, que utiliza DPAPI o RSA, puede cifrar partes selectas de un archivo de configuración.
En escenarios hospedados por Web es posible tener los servicios en subdirectorios de otros servicios. El valor predeterminado semántico para determinar los valores de configuración permite a los archivos de configuración en los directorios anidados invalidar los valores de configuración en el directorio primario. En ciertas situaciones esto puede ser indeseable por varias razones. La configuración del servicio WCF admite el bloqueo de valores de configuración para que la configuración anidada genere las excepciones cuando se ejecuta un servicio anidado, utilizando los valores de configuración invalidados.
Este ejemplo muestra cómo controlar el registro de información de identificación personal conocida (PII) en los registros de seguimiento y mensajes, como el nombre de usuario y contraseña. De forma predeterminada, el registro de PII conocida está deshabilitado, sin embargo en ciertas situaciones el registro de PII puede ser importante para depurar una aplicación. Este ejemplo se basa en el Ejemplo de introducción. Además, este ejemplo utiliza traza y registro de mensajes. Para obtener más información, vea el ejemplo Seguimiento y registro de mensajes.
Cifrar los elementos de archivo de configuración
Para los propósitos de seguridad en un entorno de alojamiento de Web compartido, puede ser deseable cifrar ciertos elementos de configuración, como cadenas de conexión a bases de datos que pueden contener información confidencial. Un elemento de configuración se puede cifrar utilizando la herramienta aspnet_regiis.exe situada, por ejemplo, en la carpeta .NET Framework, %WINDIR%\Micrsoft.NET\Framework\v2.0.50727.
Para cifrar los valores en la sección appSettings en Web.config para el ejemplo
Abra un símbolo del sistema utilizando Iniciar ->Ejecutar…. Escriba cmd y haga clic en Aceptar.
Navegue al directorio .NET Framework actual ejecutando el comando siguiente:
cd %WINDIR%\Micrsoft.NET\Framework\v2.0.50727
.Cifre la configuración del appSettings en la carpeta Web.config ejecutando el comando siguiente:
aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider"
.
Para encontrar más información sobre cómo cifrar secciones de archivos de configuración lea la instrucción sobre DPAPI en la configuración de ASP.NET (Generación de las aplicaciones ASP.NET seguras: Autenticación, Autorización y Comunicación segura) y la instrucción sobre RSA en la configuración de ASP.NET (Cómo cifrar secciones de configuración en ASP.NET 2.0 utilizando RSA).
Bloquear los elementos de archivo de configuración
En escenarios hospedados por Web, es posible tener los servicios en subdirectorios de servicios. En estas situaciones, los valores de configuración para el servicio en el subdirectorio se calculan examinando los valores en Machine.config y combinando consecutivamente con cualquier archivo Web.config en directorios primarios bajando el árbol de directorios y combinando finalmente el archivo Web.config en el directorio que contiene el servicio. El comportamiento predeterminado para la mayoría de los elementos de configuración es permitir los archivos de configuración en subdirectorios para invalidar los valores establecidos en directorios primarios. En ciertas situaciones puede ser deseable para evitar que los archivos de configuración en subdirectorios invaliden los valores establecidos en la configuración del directorio primario.
.NET Framework proporciona una manera de bloquear los elementos de archivo de configuración para que las configuraciones que invalidan los elementos de configuración bloqueados produzcan las excepciones en tiempo de ejecución.
Un elemento de configuración se puede bloquear especificando el atributo lockItem para un nodo en el archivo de configuración, por ejemplo, para encerrar el nodo CalculatorServiceBehavior en el archivo de configuración para que los servicios de calculadora en archivos de configuración anidados no puedan cambiar el comportamiento, se puede utilizar la configuración siguiente.
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior" lockItem="true">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
El bloqueo de los elementos de configuración puede ser más específico. Se puede especificar una lista de elementos como el valor a los lockElements para bloquear un conjunto de elementos dentro de una colección de sub-elementos. Se puede especificar una lista de atributos como el valor a lockAttributes para bloquear un conjunto de atributos dentro de un elemento. Una colección completa de elementos o atributos se puede bloquear salvo una lista especificada especificando los atributoslockAllElementsExcept olockAllAttributesExcept en un nodo.
Configuración de registro de PII
Dos modificadores controlan el registro de PII: un valor de equipos situados en Machine.config que permite a un administrador del equipo permitir o denegar el registro de PII y un valor de aplicación que permite a un administrador de la aplicación alternar el registro de PII para cada origen en un archivo Web.config o App.config.
El valor de equipos se controla estableciendo enableLoggingKnownPii en true o false, en el elemento machineSettings en Machine.config. Por ejemplo, lo siguiente permite a las aplicaciones activar el registro de PII.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true" />
</system.serviceModel>
</configuration>
Nota
El archivo Machine.config tiene una ubicación predeterminada: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.
Si el atributo enableLoggingKnownPii no se encuentra en Machine.config, no se permite el registo de PII.
Para habilitar el registro de PII para una aplicación se establece el atributo logKnownPii del elemento de origen en true o false en el archivo Web.config o App.config. Por ejemplo, lo siguiente habilita el registro de PII para el registro de mensajes y el registro de seguimiento.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" logKnownPii="true">
<listeners>
...
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Si no se especifica el atributo logKnownPii, a continuación, PII no está registrado.
PII sólo está registrado si ambos enableLoggingKnownPii están establecidos en true, y logKnownPii está establecido en true.
Nota
System.Diagnostics omite todos los atributos en todos los orígenes exceptuando el primero enumerado en el archivo de configuración. Agregar el atributo logKnownPii al segundo origen en el archivo de configuración no tiene ningún efecto.
Nota
La ejecución de este ejemplo implica la modificación manual de Machine.config. Se debería tener cuidado al modificar Machine.config , ya que los valores incorrectos o la sintaxis pueden evitar que todas las aplicaciones .NET Framework se ejecuten.
También es posible cifrar elementos de archivo de configuración mediante DPAPI y RSA. Para obtener más información, vea los siguientes vínculos:
Generación de aplicaciones ASP.NET seguras: Autenticación, Autorización y Comunicación segura
Cómo cifrar secciones de configuración en ASP.NET 2.0 utilizando RSA
Para configurar, generar y ejecutar el ejemplo
Asegúrese de que ha realizado Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Edite Machine.config para establecer el atributo enableLoggingKnownPii en true, agregando los nodos primarios si es necesario.
Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.
Para limpiar el ejemplo
- Edite Machine.config para establecer el atributo enableLoggingKnownPii en false.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.