Gör så här: Aktivera identifiering av återspelning av meddelanden
En reprisattack inträffar när en angripare kopierar en ström av meddelanden mellan två parter och spelar upp strömmen till en eller flera av parterna. Om de inte minimeras bearbetas dataströmmen som legitima meddelanden, vilket resulterar i en rad felaktiga konsekvenser, till exempel redundanta beställningar av ett objekt.
Mer information om identifiering av meddelanderepris finns i Identifiering av meddelanderepris.
Följande procedur visar olika egenskaper som du kan använda för att kontrollera upprepningsidentifiering med hjälp av Windows Communication Foundation (WCF).
Så här kontrollerar du omspelningsidentifiering på klienten med hjälp av kod
Skapa en SecurityBindingElement som ska användas i en CustomBinding. Mer information finns i How to: Create a Custom Binding Using the SecurityBindingElement (Skapa en anpassad bindning med securityBindingElement). I följande exempel används en SymmetricSecurityBindingElement skapad med CreateKerberosBindingElement klassens SecurityBindingElement .
Använd egenskapen LocalClientSettings för att returnera en referens till LocalClientSecuritySettings klassen och ange någon av följande egenskaper efter behov:
DetectReplay
. Ett booleskt värde. Detta styr om klienten ska identifiera repriser från servern. Standardvärdet ärtrue
.MaxClockSkew
. Ett TimeSpan värde. Styr hur lång tid omspelningsmekanismen kan tolereras mellan klienten och servern. Säkerhetsmekanismen undersöker tidsstämpeln som skickats och avgör om den skickades för långt tillbaka tidigare. Standardvärdet är 5 minuter.ReplayWindow
. EttTimeSpan
värde. Detta styr hur länge ett meddelande kan leva i nätverket efter att servern har skickat det (via mellanhänder) innan det når klienten. Klienten spårar signaturerna för de meddelanden som skickas inom den senasteReplayWindow
i syfte att identifiera omspelningar.ReplayCacheSize
. Ett heltalsvärde. Klienten lagrar signaturerna för meddelandet i en cache. Den här inställningen anger hur många signaturer cacheminnet kan lagra. Om antalet meddelanden som skickas inom det senaste uppspelningsfönstret når cachegränsen avvisas nya meddelanden tills de äldsta cachelagrade signaturerna når tidsgränsen. Standardvärdet är 500000.
Så här kontrollerar du omspelningsidentifiering på tjänsten med hjälp av kod
Skapa en SecurityBindingElement som ska användas i en CustomBinding.
Använd egenskapen LocalServiceSettings för att returnera en referens till LocalServiceSecuritySettings klassen och ange egenskaperna enligt beskrivningen tidigare.
Så här kontrollerar du omspelningsidentifiering i konfigurationen för klienten eller tjänsten
Skapa en <customBinding>.
Skapa ett
<security>
element.Skapa en localClient Inställningar> eller <localService Inställningar>.<
Ange följande attributvärden efter behov:
detectReplays
,maxClockSkew
,replayWindow
ochreplayCacheSize
. I följande exempel anges attributen för både ett<localServiceSettings>
och ett<localClientSettings>
element:<customBinding> <binding name="NewBinding0"> <textMessageEncoding /> <security> <localClientSettings replayCacheSize="800000" maxClockSkew="00:03:00" replayWindow="00:03:00" /> <localServiceSettings replayCacheSize="800000" maxClockSkew="00:03:00" replayWindow="00:03:00" /> <secureConversationBootstrap /> </security> <httpTransport /> </binding> </customBinding>
Exempel
I följande exempel skapas en SymmetricSecurityBindingElement med metoden CreateKerberosBindingElement och bindningens uppspelningsegenskaper anges.
private SecurityBindingElement CreateSymmetricBindingForClient()
{
SymmetricSecurityBindingElement b = SecurityBindingElement.CreateKerberosBindingElement();
b.LocalClientSettings.DetectReplays = true;
b.LocalClientSettings.MaxClockSkew = new TimeSpan(0, 3, 0);
b.LocalClientSettings.ReplayWindow = new TimeSpan(0, 2, 0);
b.LocalClientSettings.ReplayCacheSize = 10000;
return b;
}
Private Function CreateSymmetricBindingForClient() As SecurityBindingElement
Dim b = SecurityBindingElement.CreateKerberosBindingElement()
With b.LocalClientSettings
.DetectReplays = True
.MaxClockSkew = New TimeSpan(0, 3, 0)
.ReplayWindow = New TimeSpan(0, 2, 0)
.ReplayCacheSize = 10000
End With
Return b
End Function
Omfång för replay: Endast meddelandesäkerhet
Observera att följande procedurer endast gäller för meddelandesäkerhetsläge. För transport- och transportlägen med meddelandeautentiseringsuppgifter identifierar transportmekanismerna repriser.
Säkra konversationsanteckningar
För bindningar som aktiverar säkra konversationer kan du justera de här inställningarna både för programkanalen och för den säkra bootstrap-bindningen för konversationer. Du kan till exempel inaktivera repriser för programkanalen men aktivera dem för bootstrap-kanalen som upprättar den säkra konversationen.
Om du inte använder säkra konversationssessioner garanterar återspelningsidentifiering inte att detektera repriser i servergruppsscenarier och när processen återvinns. Detta gäller för följande bindningar som tillhandahålls av systemet:
WSHttpBinding med egenskapen inställd på EstablishSecurityContext
false
.
Kompilera koden
Följande namnområden krävs för att kompilera koden: