Delen via


Procedure: Detectie van berichtherhaling inschakelen

Een herhalingsaanval treedt op wanneer een aanvaller een stroom berichten tussen twee partijen kopieert en de stream opnieuw afspeelt naar een of meer van de partijen. Tenzij beperkt, verwerken de computers die aan de aanval onderworpen zijn de stream als legitieme berichten, wat resulteert in een reeks slechte gevolgen, zoals redundante orders van een item.

Zie Detectie van berichtherhaling voor meer informatie over detectie van berichtherhaling.

In de volgende procedure ziet u verschillende eigenschappen die u kunt gebruiken om detectie van herhalingen te beheren met behulp van Windows Communication Foundation (WCF).

Detectie van herhalingen op de client beheren met behulp van code

  1. Maak een SecurityBindingElement te gebruiken in een CustomBinding. Zie Instructies voor meer informatie : Een aangepaste binding maken met behulp van securityBindingElement. In het volgende voorbeeld wordt een SymmetricSecurityBindingElement gemaakt met de CreateKerberosBindingElementSecurityBindingElement klasse gebruikt.

  2. Gebruik de LocalClientSettings eigenschap om een verwijzing naar de LocalClientSecuritySettings klasse te retourneren en een van de volgende eigenschappen in te stellen, indien van toepassing:

    1. DetectReplay. Een Booleaanse waarde. Dit bepaalt of de client herhalingen van de server moet detecteren. De standaardwaarde is true.

    2. MaxClockSkew. Een TimeSpan waarde. Bepaalt hoeveel tijd het replay-mechanisme kan tolereren tussen de client en de server. Het beveiligingsmechanisme onderzoekt de verzonden tijdstempel en bepaalt of het in het verleden te ver is verzonden. De standaardwaarde is vijf minuten.

    3. ReplayWindow. Een TimeSpan waarde. Dit bepaalt hoe lang een bericht in het netwerk kan leven nadat de server het bericht (via tussenpersonen) heeft verzonden voordat de client wordt bereikt. De client houdt de handtekeningen bij van de berichten die binnen het laatst ReplayWindow zijn verzonden voor de detectie van opnieuw afspelen.

    4. ReplayCacheSize. Een geheel getal. De client slaat de handtekeningen van het bericht op in een cache. Met deze instelling geeft u op hoeveel handtekeningen de cache kan opslaan. Als het aantal berichten dat wordt verzonden in het laatste herhalingsvenster de cachelimiet bereikt, worden nieuwe berichten geweigerd totdat de oudste handtekeningen in de cache de tijdslimiet bereiken. De standaardwaarde is 5000000.

Detectie van herhalingen in de service beheren met behulp van code

  1. Maak een SecurityBindingElement te gebruiken in een CustomBinding.

  2. Gebruik de LocalServiceSettings eigenschap om een verwijzing naar de LocalServiceSecuritySettings klasse te retourneren en stel de eigenschappen in zoals eerder beschreven.

Detectie van herhalingen beheren in de configuratie voor de client of service

  1. Maak een <customBinding>.

  2. Maak een <security> element.

  3. Maak een localClient Instellingen> of <localService Instellingen>.<

  4. Stel de volgende kenmerkwaarden in, indien van toepassing: detectReplays, maxClockSkew, replayWindowen replayCacheSize. In het volgende voorbeeld worden de kenmerken van zowel een <localServiceSettings> als een <localClientSettings> element ingesteld:

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

Opmerking

In het volgende voorbeeld wordt een SymmetricSecurityBindingElement met behulp van de CreateKerberosBindingElement methode gemaakt en worden de eigenschappen van de herhaling van de binding ingesteld.

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

Bereik van opnieuw afspelen: alleen berichtbeveiliging

Houd er rekening mee dat de volgende procedures alleen van toepassing zijn op de berichtbeveiligingsmodus. Voor transport- en transportmodi met berichtreferenties detecteren de transportmechanismen herhalingen.

Gespreksnotities beveiligen

Voor bindingen die beveiligde gesprekken mogelijk maken, kunt u deze instellingen zowel voor het toepassingskanaal als voor de binding voor beveiligde gespreksbootstrap aanpassen. U kunt bijvoorbeeld herhalingen voor het toepassingskanaal uitschakelen, maar deze inschakelen voor het bootstrap-kanaal waarmee het beveiligde gesprek tot stand wordt brengen.

Als u geen beveiligde gesprekssessies gebruikt, garandeert replaydetectie niet dat er herhalingen worden gedetecteerd in serverfarmscenario's en wanneer het proces wordt gerecycled. Dit is van toepassing op de volgende door het systeem geleverde bindingen:

De code compileren

Zie ook