Dela via


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

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

  2. Använd egenskapen LocalClientSettings för att returnera en referens till LocalClientSecuritySettings klassen och ange någon av följande egenskaper efter behov:

    1. DetectReplay. Ett booleskt värde. Detta styr om klienten ska identifiera repriser från servern. Standardvärdet är true.

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

    3. ReplayWindow. Ett TimeSpan 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 senaste ReplayWindow i syfte att identifiera omspelningar.

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

  1. Skapa en SecurityBindingElement som ska användas i en CustomBinding.

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

  1. Skapa en <customBinding>.

  2. Skapa ett <security> element.

  3. Skapa en localClient Inställningar> eller <localService Inställningar>.<

  4. Ange följande attributvärden efter behov: detectReplays, maxClockSkew, replayWindowoch replayCacheSize. 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:

Kompilera koden

Se även