Postupy: Povolení zjišťování opakování zpráv

Útok na přehrání nastane, když útočník zkopíruje stream zpráv mezi dvěma stranami a přehraje stream na jednu nebo více stran. Pokud to zmírnit není, počítače, na které se útok vztahuje, zpracuje stream jako legitimní zprávy, což vede k rozsahu špatných důsledků, jako jsou redundantní objednávky položky.

Další informace o detekci přehrání zpráv naleznete v tématu Detekce přehrání zpráv.

Následující postup ukazuje různé vlastnosti, které můžete použít k řízení detekce přehrávání pomocí technologie Windows Communication Foundation (WCF).

Řízení detekce přehrání na klientovi pomocí kódu

  1. Vytvořte soubor SecurityBindingElement , který se má použít v souboru CustomBinding. Další informace naleznete v tématu Postupy: Vytvoření vlastní vazby pomocí SecurityBindingElement. Následující příklad používá vytvořenou SymmetricSecurityBindingElement s CreateKerberosBindingElementSecurityBindingElement třídou.

  2. LocalClientSettings Pomocí vlastnosti vrátíte odkaz na LocalClientSecuritySettings třídu a podle potřeby nastavíte některou z následujících vlastností:

    1. DetectReplay. Logická hodnota. To určuje, jestli má klient detekovat přehrání ze serveru. Výchozí hodnota je true.

    2. MaxClockSkew. Hodnota TimeSpan . Určuje, kolik času může mechanismus přehrání tolerovat mezi klientem a serverem. Bezpečnostní mechanismus zkoumá odeslaná časová razítka a určuje, jestli byl odeslán příliš daleko zpět v minulosti. Výchozí hodnota je 5 minut.

    3. ReplayWindow. Hodnota TimeSpan . To určuje, jak dlouho může zpráva žít v síti poté, co ji server odešle (prostřednictvím zprostředkovatelů) před dosažením klienta. Klient sleduje podpisy zpráv odeslaných v nejnovější ReplayWindow verzi pro účely detekce přehrání.

    4. ReplayCacheSize. Celočíselná hodnota. Klient ukládá podpisy zprávy do mezipaměti. Toto nastavení určuje, kolik podpisů může mezipaměť uložit. Pokud počet zpráv odeslaných v posledním okně přehrávání dosáhne limitu mezipaměti, budou nové zprávy odmítnuty, dokud nedosáhne časového limitu nejstarší podpisy uložené v mezipaměti. Výchozí hodnota je 500000.

Řízení detekce přehrání ve službě pomocí kódu

  1. Vytvořte soubor SecurityBindingElement , který se má použít v souboru CustomBinding.

  2. LocalServiceSettings Vlastnost použijte k vrácení odkazu na LocalServiceSecuritySettings třídu a nastavte vlastnosti, jak je popsáno výše.

Řízení detekce přehrání v konfiguraci klienta nebo služby

  1. Vytvořte vlastní vazbu>.<

  2. Vytvořte <security> prvek.

  3. Vytvořte localClient Nastavení> nebo <localService Nastavení>.<

  4. Podle potřeby nastavte následující hodnoty atributů: detectReplays, maxClockSkew, replayWindowa replayCacheSize. Následující příklad nastaví atributy jak a <localServiceSettings><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>  
    

Příklad

Následující příklad vytvoří SymmetricSecurityBindingElement pomocí CreateKerberosBindingElement metody a nastaví vlastnosti přehrání vazby.

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

Rozsah přehrání: Pouze zabezpečení zpráv

Všimněte si, že následující postupy platí pouze pro režim zabezpečení zpráv. V případě režimů přenosů a přenosů s přihlašovacími údaji zpráv detekují přehrání mechanismy přenosu.

Zabezpečené poznámky ke konverzaci

U vazeb, které umožňují zabezpečené konverzace, můžete tato nastavení upravit jak pro kanál aplikace, tak pro zabezpečenou vazbu bootstrap konverzace. Můžete například vypnout přehrání kanálu aplikace, ale povolit je pro kanál bootstrap, který vytvoří zabezpečenou konverzaci.

Pokud nepoužíváte zabezpečené relace konverzací, detekce přehrání nezaručuje detekci přehrání ve scénářích serverové farmy a při recyklaci procesu. To platí pro následující systémové vazby:

Probíhá kompilace kódu

Viz také