PiI-beveiligingsvergrendeling
Het SecurityLockdown-voorbeeld laat zien hoe u verschillende beveiligingsfuncties van een WCF-service (Windows Communication Foundation) kunt beheren door:
Gevoelige informatie versleutelen in het configuratiebestand van een service.
Het vergrendelen van elementen in het configuratiebestand, zodat geneste servicesubmappen geen instellingen kunnen overschrijven.
Het beheren van de logboekregistratie van persoonsgegevens (PII) in tracerings- en berichtlogboeken.
Discussie
Elk van deze functies kan afzonderlijk of samen worden gebruikt om aspecten van de beveiliging van een service te beheren. Dit is geen definitieve handleiding voor het beveiligen van een WCF-service.
De .NET Framework-configuratiebestanden kunnen gevoelige informatie bevatten, zoals verbindingsreeks s om verbinding te maken met databases. In gedeelde scenario's met een webhost kan het wenselijk zijn om deze informatie in het configuratiebestand voor een service te versleutelen, zodat de gegevens in het configuratiebestand bestand zijn bestand tegen ongedwongen weergave. .NET Framework 2.0 en hoger heeft de mogelijkheid om delen van het configuratiebestand te versleutelen met behulp van de Windows Data Protection Application Programming Interface (DPAPI) of de cryptografische RSA-provider. De aspnet_regiis.exe die de DPAPI of RSA gebruiken, kunnen bepaalde delen van een configuratiebestand versleutelen.
In web-hostende scenario's is het mogelijk om services te hebben in submappen van andere services. Met de semantische standaardinstelling voor het bepalen van configuratiewaarden kunnen configuratiebestanden in de geneste mappen de configuratiewaarden in de bovenliggende map overschrijven. In bepaalde situaties kan dit om verschillende redenen ongewenst zijn. WcF-serviceconfiguratie ondersteunt het vergrendelen van configuratiewaarden, zodat geneste configuratie uitzonderingen genereert wanneer een geneste service wordt uitgevoerd met behulp van overschreven configuratiewaarden.
In dit voorbeeld ziet u hoe u de logboekregistratie van bekende persoonsgegevens (PII) kunt beheren in tracerings- en berichtlogboeken, zoals gebruikersnaam en wachtwoord. Logboekregistratie van bekende PII is standaard uitgeschakeld, maar in bepaalde situaties kan logboekregistratie van PII belangrijk zijn bij het opsporen van fouten in een toepassing. Dit voorbeeld is gebaseerd op aan de slag. Daarnaast maakt dit voorbeeld gebruik van tracering en logboekregistratie van berichten. Zie het voorbeeld tracering en logboekregistratie van berichten voor meer informatie.
Elementen van het configuratiebestand versleutelen
Voor beveiligingsdoeleinden in een gedeelde webhostingomgeving kan het wenselijk zijn om bepaalde configuratie-elementen te versleutelen, zoals database-verbindingsreeks s die gevoelige informatie kunnen bevatten. Een configuratie-element kan worden versleuteld met behulp van het hulpprogramma aspnet_regiis.exe in de map .NET Framework, bijvoorbeeld %WINDIR%\Microsoft.NET\Framework\v4.0.20728.
De waarden in de app versleutelen Instellingen sectie in Web.config voor het voorbeeld
Open een opdrachtprompt met Start-Run>.... Typ en
cmd
klik op OK.Navigeer naar de huidige .NET Framework-map door de volgende opdracht uit te geven:
cd %WINDIR%\Microsoft.NET\Framework\v4.0.20728
Versleutel de app Instellingen configuratie-instellingen in de map Web.config door de volgende opdracht uit te geven:
aspnet_regiis -pe "appSettings" -app "/servicemodelsamples" -prov "DataProtectionConfigurationProvider"
Meer informatie over het versleutelen van secties van configuratiebestanden vindt u door een procedure op DPAPI te lezen in ASP.NET configuratie (Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication) en een instructies op RSA in ASP.NET configuratie (How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA).
Configuratiebestandselementen vergrendelen
In web-gehoste scenario's is het mogelijk om services in submappen van services te hebben. In deze situaties worden configuratiewaarden voor de service in de submap berekend door waarden in Machine.config te onderzoeken en achtereenvolgens samen te voegen met web.config-bestanden in bovenliggende mappen die de mapstructuur omlaag verplaatsen en ten slotte het bestand Web.config samenvoegen in de map die de service bevat. Het standaardgedrag voor de meeste configuratie-elementen is om configuratiebestanden in submappen toe te staan de waarden te overschrijven die zijn ingesteld in bovenliggende mappen. In bepaalde situaties kan het wenselijk zijn om te voorkomen dat configuratiebestanden in submappen waarden overschrijven die zijn ingesteld in de bovenliggende mapconfiguratie.
Het .NET Framework biedt een manier om elementen van configuratiebestanden te vergrendelen, zodat configuraties die vergrendelde configuratie-elementen overschrijven runtime-uitzonderingen genereren.
Een configuratie-element kan worden vergrendeld door het lockItem
kenmerk voor een knooppunt in het configuratiebestand op te geven, bijvoorbeeld om het knooppunt CalculatorServiceBehavior in het configuratiebestand te vergrendelen, zodat rekenmachineservices in geneste configuratiebestanden het gedrag niet kunnen wijzigen. De volgende configuratie kan worden gebruikt.
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior" lockItem="true">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Het vergrendelen van configuratie-elementen kan specifieker zijn. Een lijst met elementen kan worden opgegeven als de waarde voor het lockElements
vergrendelen van een set elementen binnen een verzameling subelementen. Een lijst met kenmerken kan worden opgegeven als de waarde voor het lockAttributes
vergrendelen van een set kenmerken binnen een element. Een volledige verzameling elementen of kenmerken kan worden vergrendeld, met uitzondering van een opgegeven lijst door de lockAllElementsExcept
of lockAllAttributesExcept
kenmerken op een knooppunt op te geven.
Configuratie van PII-logboekregistratie
Logboekregistratie van PII wordt beheerd door twee switches: een computerbrede instelling in Machine.config waarmee een computerbeheerder logboekregistratie van PII kan toestaan of weigeren en een toepassingsinstelling waarmee een toepassingsbeheerder logboekregistratie van PII kan in- of uitschakelen voor elke bron in een Web.config- of App.config-bestand.
De computerbrede instelling wordt bepaald door enableLoggingKnownPii
true
false
in of , in het machineSettings
element in Machine.config. Met het volgende kunnen toepassingen bijvoorbeeld logboekregistratie van PII inschakelen.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true" />
</system.serviceModel>
</configuration>
Notitie
Het bestand Machine.config heeft een standaardlocatie: %WINDIR%\Microsoft.NET\Framework\v2.0.50727\CONFIG.
Als het enableLoggingKnownPii
kenmerk niet aanwezig is in Machine.config, is logboekregistratie van PII niet toegestaan.
Het inschakelen van logboekregistratie van PII voor een toepassing wordt uitgevoerd door het logKnownPii
kenmerk van het bronelement in te true
stellen op of false
in het Web.config- of App.config-bestand. Met het volgende kunt u bijvoorbeeld logboekregistratie van PII inschakelen voor zowel berichtregistratie als traceringslogboekregistratie.
<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>
Als het logKnownPii
kenmerk niet is opgegeven, wordt PII niet geregistreerd.
PII wordt alleen geregistreerd als beide enableLoggingKnownPii
zijn ingesteld true
op , en logKnownPii
is ingesteld op true
.
Notitie
System.Diagnostics negeert alle kenmerken van alle bronnen, behalve de eerste die in het configuratiebestand wordt vermeld. Het toevoegen van het logKnownPii
kenmerk aan de tweede bron in het configuratiebestand heeft geen effect.
Belangrijk
Als u dit voorbeeld wilt uitvoeren, moet u machine.config handmatig wijzigen. Bij het wijzigen van Machine.config als onjuiste waarden of syntaxis moet u ervoor zorgen dat alle .NET Framework-toepassingen mogelijk niet worden uitgevoerd.
Het is ook mogelijk om elementen van het configuratiebestand te versleutelen met behulp van DPAPI en RSA. Zie de volgende koppelingen voor meer informatie:
Beveiligde ASP.NET-toepassingen bouwen: verificatie, autorisatie en beveiligde communicatie
Procedure: Configuratiesecties versleutelen in ASP.NET 2.0 met behulp van RSA
Het voorbeeld bouwen en uitvoeren om het in te stellen
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Bewerk Machine.config om het
enableLoggingKnownPii
kenmerktrue
in te stellen en voeg zo nodig de bovenliggende knooppunten toe.Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Als u het voorbeeld wilt uitvoeren in een configuratie van één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.
Het voorbeeld opschonen
- Bewerk Machine.config om het
enableLoggingKnownPii
kenmerk in te stellen opfalse
.