Dela via


PII-säkerhetslåsning

SecurityLockdown-exemplet visar hur du kontrollerar flera säkerhetsrelaterade funktioner i en WCF-tjänst (Windows Communication Foundation) genom att:

  • Kryptera känslig information i en tjänsts konfigurationsfil.

  • Låser element i konfigurationsfilen så att kapslade tjänstunderkataloger inte kan åsidosätta inställningarna.

  • Kontrollera loggning av personligt identifierbar information (PII) i spårnings- och meddelandeloggar.

Diskussion

Var och en av dessa funktioner kan användas separat eller tillsammans för att styra aspekter av en tjänsts säkerhet. Det här är inte en slutgiltig guide för att skydda en WCF-tjänst.

.NET Framework-konfigurationsfilerna kan innehålla känslig information, till exempel anslutningssträng för att ansluta till databaser. I delade, webbaserade scenarier kan det vara önskvärt att kryptera den här informationen i konfigurationsfilen för en tjänst så att data som finns i konfigurationsfilen är resistenta mot tillfällig visning. .NET Framework 2.0 och senare har möjlighet att kryptera delar av konfigurationsfilen med hjälp av Windows Data Protection-programmets programmeringsgränssnitt (DPAPI) eller RSA Cryptographic-providern. Den aspnet_regiis.exe med DPAPI eller RSA kan kryptera utvalda delar av en konfigurationsfil.

I webbaserade scenarier är det möjligt att ha tjänster i underkataloger till andra tjänster. Standardsemantiken för att fastställa konfigurationsvärden gör att konfigurationsfiler i kapslade kataloger kan åsidosätta konfigurationsvärdena i den överordnade katalogen. I vissa situationer kan detta vara oönskat av olika skäl. WCF-tjänstkonfiguration stöder låsning av konfigurationsvärden så att kapslad konfiguration genererar undantag när en kapslad tjänst körs med hjälp av åsidosatta konfigurationsvärden.

Det här exemplet visar hur du styr loggningen av känd personligt identifierbar information (PII) i spårnings- och meddelandeloggar, till exempel användarnamn och lösenord. Som standard är loggning av känd PII inaktiverad, men i vissa situationer kan loggning av PII vara viktigt vid felsökning av ett program. Det här exemplet baseras på Komma igång. Dessutom används spårning och meddelandeloggning i det här exemplet. Mer information finns i exemplet spårning och meddelandeloggning .

Kryptera konfigurationsfilelement

I säkerhetssyfte i en delad webbvärdmiljö kan det vara önskvärt att kryptera vissa konfigurationselement, till exempel databas anslutningssträng som kan innehålla känslig information. Ett konfigurationselement kan krypteras med hjälp av verktyget aspnet_regiis.exe som finns i .NET Framework-mappen Till exempel %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

Så här krypterar du värdena i appen Inställningar i Web.config för exemplet

  1. Öppna en kommandotolk med Start-Run>.... Skriv in cmd och klicka på OK.

  2. Navigera till den aktuella .NET Framework-katalogen genom att utfärda följande kommando: cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728.

  3. Kryptera appen Inställningar konfigurationsinställningar i mappen Web.config genom att utfärda följande kommando: aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider".

Mer information om kryptering av delar av konfigurationsfiler finns genom att läsa en instruktioner för DPAPI i ASP.NET konfiguration (Skapa säkra ASP.NET-program: Autentisering, auktorisering och säker kommunikation) och en instruktioner för RSA i ASP.NET konfiguration (How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA).

Låsa konfigurationsfilelement

I webbaserade scenarier är det möjligt att ha tjänster i underkataloger för tjänster. I dessa situationer beräknas konfigurationsvärdena för tjänsten i underkatalogen genom att undersöka värdena i Machine.config och successivt sammanfoga med alla Web.config-filer i överordnade kataloger som flyttas ned i katalogträdet och slutligen slå samman filen Web.config i katalogen som innehåller tjänsten. Standardbeteendet för de flesta konfigurationselement är att tillåta att konfigurationsfiler i underkataloger åsidosätter de värden som anges i överordnade kataloger. I vissa situationer kan det vara önskvärt att förhindra att konfigurationsfiler i underkataloger åsidosätta värden som anges i den överordnade katalogkonfigurationen.

.NET Framework är ett sätt att låsa konfigurationsfilelement så att konfigurationer som åsidosätter låsta konfigurationselement utlöser körningsfel.

Ett konfigurationselement kan låsas genom att lockItem ange attributet för en nod i konfigurationsfilen, till exempel för att låsa noden CalculatorServiceBehavior i konfigurationsfilen så att kalkylatortjänster i kapslade konfigurationsfiler inte kan ändra beteendet. Följande konfiguration kan användas.

<configuration>
   <system.serviceModel>
      <behaviors>
          <serviceBehaviors>
             <behavior name="CalculatorServiceBehavior" lockItem="true">
               <serviceMetadata httpGetEnabled="True"/>
               <serviceDebug includeExceptionDetailInFaults="False" />
             </behavior>
          </serviceBehaviors>
       </behaviors>
    </system.serviceModel>
</configuration>

Låsning av konfigurationselement kan vara mer specifik. En lista med element kan anges som värdet för lockElements att låsa en uppsättning element i en samling underelement. En lista med attribut kan anges som värdet för lockAttributes att låsa en uppsättning attribut i ett element. En hel samling element eller attribut kan låsas förutom en angiven lista genom att ange attributen lockAllElementsExcept eller lockAllAttributesExcept på en nod.

Konfiguration av PII-loggning

Loggning av PII styrs av två växlar: en datoromfattande inställning som finns i Machine.config som gör att en datoradministratör kan tillåta eller neka loggning av PII och en programinställning som gör att en programadministratör kan växla loggning av PII för varje källa i en Web.config- eller App.config-fil.

Inställningen för hela datorn styrs av inställningen enableLoggingKnownPii till true eller false, i elementet machineSettings i Machine.config. Följande tillåter till exempel att program aktiverar loggning av PII.

<configuration>
    <system.serviceModel>
        <machineSettings enableLoggingKnownPii="true" />
    </system.serviceModel>
</configuration>

Kommentar

Filen Machine.config har en standardplats: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.

Om attributet enableLoggingKnownPii inte finns i Machine.config tillåts inte loggning av PII.

Aktivering av loggning av PII för ett program görs genom att ange logKnownPii attributet för källelementet till true eller false i filen Web.config eller App.config. Följande aktiverar till exempel loggning av PII för både meddelandeloggning och spårningsloggning.

<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>

Om attributet logKnownPii inte har angetts loggas inte PII.

PII loggas endast om båda enableLoggingKnownPii är inställda på true, och logKnownPii är inställt på true.

Kommentar

System.Diagnostics ignorerar alla attribut på alla källor utom det första som anges i konfigurationsfilen. logKnownPii Att lägga till attributet till den andra källan i konfigurationsfilen har ingen effekt.

Viktigt!

För att köra det här exemplet ingår manuell ändring av Machine.config. Var försiktig när du ändrar Machine.config eftersom felaktiga värden eller syntax kan förhindra att alla .NET Framework-program körs.

Det går också att kryptera konfigurationsfilelement med DPAPI och RSA. Mer information finns på följande länkar:

Konfigurera genom att skapa och köra exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Redigera Machine.config för att ange enableLoggingKnownPii attributet till trueoch lägga till de överordnade noderna om det behövs.

  3. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  4. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.

Så här rensar du exemplet

  1. Redigera Machine.config för att ange enableLoggingKnownPii attributet till false.

Se även