Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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ängar 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 som använder 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 element i konfigurationsfilen
I säkerhetssyfte i en delad webbvärdmiljö kan det vara önskvärt att kryptera vissa konfigurationselement, till exempel databasanslutningssträngar 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 avsnittet appSettings i Web.config för exemplet
Öppna kommandoprompten med Start-Kör>.... Skriv in
cmd
och klicka på OK.Navigera till den aktuella .NET Framework-katalogen genom att utfärda följande kommando:
cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728
.Kryptera konfigurationsinställningarna för appSettings 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 först undersöka värden i Machine.config och sedan successivt kombinera dem med alla Web.config-filer i överordnade kataloger längs katalogträdet, och slutligen kombinera dem med Web.config-filen 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 tillhandahåller ett sätt att låsa konfigurationselement så att konfigurationer som åsidosätter låsta element utlöser körningsundantag.
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>
Anmärkning
Filen Machine.config har en standardplats: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.
enableLoggingKnownPii
Om attributet inte finns i Machine.configtillå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 Web.config- eller App.config-filen. 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
.
Anmärkning
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. Du bör vara 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:
Skapa säkra ASP.NET program: Autentisering, auktorisering och säker kommunikation
Anvisningar: Kryptera konfigurationsavsnitt i ASP.NET 2.0 med hjälp av RSA
För att konfigurera, bygga och köra exemplet
Kontrollera att du har utfört One-Time installationsproceduren för Windows Communication Foundation-exempel.
Redigera Machine.config för att ange
enableLoggingKnownPii
attributet tilltrue
och lägga till de överordnade noderna om det behövs.Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
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
- Redigera Machine.config för att ange
enableLoggingKnownPii
attributet tillfalse
.