Partekatu bidez


Bloqueo de seguridad PII

En el ejemplo SecurityLockdown se muestra cómo controlar varias características relacionadas con la seguridad de un servicio de Windows Communication Foundation (WCF) mediante:

  • Cifrado de información confidencial en el archivo de configuración de un servicio.

  • Bloquear elementos en el archivo de configuración para que los subdirectorios de servicio anidados no puedan invalidar la configuración.

  • Controlar el registro de información de identificación personal (PII) en los registros de seguimiento y mensajes.

Discusión

Cada una de estas características se puede usar por separado o conjuntamente para controlar los aspectos de la seguridad de un servicio. Esta 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 conectarse a bases de datos. En escenarios compartidos hospedados en web, puede ser conveniente cifrar esta información en el archivo de configuración de un servicio para que los datos contenidos en el archivo de configuración sean resistentes a la visualización casual. .NET Framework 2.0 y versiones posteriores tienen la capacidad de cifrar partes del archivo de configuración mediante la interfaz de programación de aplicaciones de Protección de datos de Windows (DPAPI) o el proveedor criptográfico RSA. El aspnet_regiis.exe mediante DPAPI o RSA puede cifrar partes selectas de un archivo de configuración.

En escenarios hospedados en web, es posible tener servicios en subdirectorios de otros servicios. La semántica predeterminada para determinar los valores de configuración permite que los archivos de configuración de los directorios anidados invaliden los valores de configuración del directorio primario. En determinadas situaciones, esto puede no ser deseable por diversos motivos. La configuración del servicio WCF admite el bloqueo de valores de configuración para que la configuración anidada genere excepciones cuando se ejecuta un servicio anidado mediante valores de configuración invalidados.

En este ejemplo se muestra cómo controlar el registro de información de identificación personal (PII) conocida en los registros de seguimiento y mensajes, como el nombre de usuario y la contraseña. De forma predeterminada, el registro de PII conocido está deshabilitado, sin embargo, en determinadas situaciones, el registro de PII puede ser importante en la depuración de una aplicación. Este ejemplo se basa en la introducción. Además, en este ejemplo se usa el seguimiento y el registro de mensajes. Para obtener más información, consulte el ejemplo de Seguimiento y Registro de Mensajes.

Cifrado de elementos de archivo de configuración

Con fines de seguridad en un entorno de hospedaje web compartido, puede ser conveniente cifrar determinados elementos de configuración, como cadenas de conexión de base de datos que pueden contener información confidencial. Un elemento de configuración se puede cifrar mediante la herramienta aspnet_regiis.exe que se encuentra en la carpeta .NET Framework Por ejemplo, %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

Para cifrar los valores de la sección appSettings de Web.config para el ejemplo

  1. Abra un símbolo del sistema desde Inicio -> Ejecutar... Escriba y haga clic en cmdAceptar.

  2. Vaya al directorio actual de .NET Framework mediante la emisión del comando siguiente: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

  3. Cifre los valores de configuración de appSettings en la carpeta Web.config emitiendo el siguiente comando: aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider".

Para obtener más información sobre el cifrado de secciones de archivos de configuración, lea un procedimiento sobre DPAPI en ASP.NET configuración (Creación de aplicaciones seguras de ASP.NET: autenticación, autorización y comunicación segura) y un procedimiento sobre RSA en ASP.NET configuración (Cómo: Cifrar secciones de configuración en ASP.NET 2.0 mediante RSA).

Bloquear elementos del archivo de configuración

En escenarios hospedados en web, es posible tener servicios en subdirectorios de servicios. En estas situaciones, los valores de configuración del servicio en el subdirectorio se calculan mediante el examen de valores en Machine.config y la combinación sucesiva con los archivos Web.config de los directorios primarios que se mueven hacia abajo del árbol de directorios y, por último, combinan el archivo Web.config en el directorio que contiene el servicio. El comportamiento predeterminado de la mayoría de los elementos de configuración es permitir que los archivos de configuración de los subdirectorios invaliden los valores establecidos en directorios primarios. En determinadas situaciones, puede ser conveniente evitar que los archivos de configuración de los subdirectorios invalide los valores establecidos en la configuración del directorio primario.

.NET Framework proporciona una manera de bloquear los elementos del archivo de configuración para que las configuraciones que invaliden los elementos de configuración bloqueados produzcan excepciones en tiempo de ejecución.

Un elemento de configuración se puede bloquear especificando el lockItem atributo de un nodo en el archivo de configuración, por ejemplo, para bloquear el nodo CalculatorServiceBehavior en el archivo de configuración para que los servicios de calculadora de los archivos de configuración anidados no puedan cambiar el comportamiento, se puede usar la siguiente configuración.

<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 elementos de configuración puede ser más específico. Se puede especificar una lista de elementos como valor para lockElements bloquear un conjunto de elementos dentro de una colección de subelementos. Se puede especificar una lista de atributos como valor para lockAttributes bloquear un conjunto de atributos dentro de un elemento . Se puede bloquear toda una colección de elementos o atributos, excepto para una lista especificada, especificando los lockAllElementsExcept atributos o lockAllAttributesExcept en un nodo.

Configuración de registro de PII

El registro de PII se controla mediante dos modificadores: una configuración de todo el equipo que se encuentra en Machine.config que permite que un administrador de equipos permita o deniegue el registro de PII y una configuración de aplicación que permite a un administrador de aplicaciones alternar el registro de PII para cada origen en un archivo de Web.config o App.config.

La configuración de todo el equipo se controla estableciendo enableLoggingKnownPii entrue o false, en el elemento machineSettings de Machine.config. Por ejemplo, el código siguiente permite que las aplicaciones activen el registro de información de identificación personal.

<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 enableLoggingKnownPii atributo no está presente en Machine.config, no se permite el registro de PII.

Para habilitar el registro de PII para una aplicación, establezca 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 logKnownPii atributo , no se registra piI.

PII solo está registrado si ambos enableLoggingKnownPii están establecidos en true, y logKnownPii está establecido en true.

Nota:

System.Diagnostics omite todos los atributos de todos los orígenes, excepto el primero que aparece en el archivo de configuración. Agregar el logKnownPii atributo al segundo origen del archivo de configuración no tiene ningún efecto.

Importante

Ejecutar este ejemplo implica modificar manualmente Machine.config. Se debe tener cuidado al modificar Machine.config, ya que valores o sintaxis incorrectos pueden impedir el funcionamiento de todas las aplicaciones del .NET Framework.

También es posible cifrar elementos de archivo de configuración mediante DPAPI y RSA. Para obtener más información, consulte los siguientes vínculos:

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Edite Machine.config para establecer el atributo enableLoggingKnownPii a true, agregando los nodos padre si es necesario.

  3. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  4. Para ejecutar el ejemplo en una configuración de un solo equipo o entre equipos, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.

Para limpiar la muestra

  1. Edite Machine.config para establecer el enableLoggingKnownPii atributo en false.

Consulte también