Udostępnij za pośrednictwem


Instrukcje: Włączanie wykrywania powtarzania komunikatu

Atak powtarzania występuje, gdy osoba atakująca kopiuje strumień wiadomości między dwiema stronami i odtwarza strumień do co najmniej jednej strony. O ile nie zostanie to rozwiązane, komputery objęte atakiem będą przetwarzać strumień jako uzasadnione komunikaty, co skutkuje szeregiem złych konsekwencji, takich jak nadmiarowe zamówienia elementu.

Aby uzyskać więcej informacji na temat wykrywania powtarzania komunikatów, zobacz Wykrywanie powtarzania komunikatów.

Poniższa procedura przedstawia różne właściwości, których można użyć do kontrolowania wykrywania powtórzeń przy użyciu programu Windows Communication Foundation (WCF).

Aby kontrolować wykrywanie odtwarzania na kliencie przy użyciu kodu

  1. Utwórz element SecurityBindingElement do użycia w obiekcie CustomBinding. Aby uzyskać więcej informacji, zobacz How to: Create a Custom Binding Using the SecurityBindingElement (Instrukcje: tworzenie powiązania niestandardowego przy użyciu elementu SecurityBindingElement). W poniższym przykładzie użyto SymmetricSecurityBindingElement utworzonego obiektu z CreateKerberosBindingElement klasą SecurityBindingElement .

  2. Użyj właściwości , LocalClientSettings aby zwrócić odwołanie do LocalClientSecuritySettings klasy i ustawić dowolną z następujących właściwości, zgodnie z potrzebami:

    1. DetectReplay. Wartość logiczna. Określa to, czy klient powinien wykrywać powtórki z serwera. Wartość domyślna to true.

    2. MaxClockSkew. TimeSpan Wartość. Określa, ile czasu może tolerować mechanizm odtwarzania między klientem a serwerem. Mechanizm zabezpieczeń sprawdza wysłaną sygnaturę czasową i określa, czy został wysłany zbyt daleko w przeszłości. Wartość domyślna to 5 minut.

    3. ReplayWindow. TimeSpan Wartość. Określa to, jak długo komunikat może żyć w sieci po wysłaniu go przez serwer (za pośrednictwem pośredników) przed dotarciem do klienta. Klient śledzi podpisy komunikatów wysyłanych w najnowszej ReplayWindow wersji do celów wykrywania powtórzeń.

    4. ReplayCacheSize. Wartość całkowita. Klient przechowuje podpisy komunikatu w pamięci podręcznej. To ustawienie określa, ile podpisów może przechowywać pamięć podręczna. Jeśli liczba komunikatów wysłanych w ostatnim oknie odtwarzania osiągnie limit pamięci podręcznej, nowe komunikaty zostaną odrzucone do momentu osiągnięcia limitu czasu najstarszych podpisów buforowanych. Wartość domyślna to 500000.

Aby kontrolować wykrywanie odtwarzania w usłudze przy użyciu kodu

  1. Utwórz element SecurityBindingElement do użycia w obiekcie CustomBinding.

  2. Użyj właściwości , LocalServiceSettings aby zwrócić odwołanie do LocalServiceSecuritySettings klasy i ustawić właściwości zgodnie z wcześniejszym opisem.

Aby kontrolować wykrywanie odtwarzania w konfiguracji klienta lub usługi

  1. Utwórz element <customBinding>.

  2. Utwórz <security> element.

  3. Utwórz element localClient Ustawienia> lub <localService Ustawienia>.<

  4. Ustaw następujące wartości atrybutów, odpowiednio: detectReplays, , maxClockSkewreplayWindowi replayCacheSize. W poniższym przykładzie ustawiane są atrybuty elementu <localServiceSettings> i <localClientSettings> :

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

Przykład

Poniższy przykład tworzy SymmetricSecurityBindingElement obiekt przy użyciu CreateKerberosBindingElement metody i ustawia właściwości odtwarzania powiązania.

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

Zakres odtwarzania: tylko zabezpieczenia komunikatów

Należy pamiętać, że poniższe procedury dotyczą tylko trybu zabezpieczeń wiadomości. W przypadku transportu i transportu z trybami poświadczeń komunikatów mechanizmy transportu wykrywają powtórki.

Bezpieczne notatki z konwersacji

W przypadku powiązań, które umożliwiają bezpieczne konwersacje, można dostosować te ustawienia zarówno dla kanału aplikacji, jak i dla bezpiecznego powiązania bootstrap konwersacji. Można na przykład wyłączyć powtórki dla kanału aplikacji, ale włączyć je dla kanału bootstrap, który ustanawia bezpieczną konwersację.

Jeśli nie używasz bezpiecznych sesji konwersacji, wykrywanie odtwarzania nie gwarantuje wykrywania powtórzeń w scenariuszach farmy serwerów i podczas recyklingu procesu. Dotyczy to następujących powiązań dostarczonych przez system:

Kompilowanie kodu

Zobacz też