Поделиться через


Практическое руководство. Включение обнаружения повтора сообщений

Атака воспроизведения заключается в том, что злоумышленник копирует поток сообщений между двумя сторонами и воспроизводит его для одной или нескольких сторон. Если не приняты ответные меры, атакованные компьютеры обрабатывают этот поток как надлежащие сообщения, что приводит к ряду негативных последствий, таких как повторные заказы одного элемента.

Дополнительные сведения об обнаружении воспроизведения сообщений см. в разделе "Обнаружение воспроизведения сообщений".

В следующей процедуре показаны различные свойства, которые можно использовать для управления обнаружением воспроизведения с помощью Windows Communication Foundation (WCF).

Управление обнаружением воспроизведения на стороне клиента с помощью кода

  1. Создайте элемент SecurityBindingElement для использования в привязке CustomBinding. Дополнительные сведения см. в разделе "Практическое руководство. Создание пользовательской привязки с помощью SecurityBindingElement". В следующем примере используется объект SymmetricSecurityBindingElement, созданный с помощью объекта CreateKerberosBindingElement класса SecurityBindingElement.

  2. С помощью свойства LocalClientSettings получите ссылку на класс LocalClientSecuritySettings и задайте некоторые из следующих свойств согласно необходимости:

    1. DetectReplay. Значение типа Boolean. Управляет тем, пытается ли клиент обнаружить воспроизведение сообщений сервера. Значение по умолчанию — true.

    2. MaxClockSkew. Значение TimeSpan. Задает максимальную разницу по времени, допускаемую механизмом обнаружения воспроизведения между клиентом и сервером. Механизм безопасности проверяет отправленную отметку времени и определяет, не слишком ли давно она отправлена. Значение по умолчанию равно 5 минутам.

    3. ReplayWindow. Значение TimeSpan. Задает максимальное время жизни сообщения в сети с момента его отправки сервером (через промежуточные узлы), прежде чем оно доставляется клиенту. Клиент отслеживает подписи сообщений, отправленных в течение последнего промежутка времени ReplayWindow, с целью обнаружения воспроизведения.

    4. ReplayCacheSize. Целочисленное значение. Клиент сохраняет подписи сообщений в кэше. Этот параметр задает максимальное количество подписей, которое может храниться в кэше. Если количество сообщений, отправленных в пределах последнего окна воспроизведения, достигает предела кэша, новые сообщения отклоняются, пока не будет достигнут предел по времени для самых старых подписей в кэше. Значение по умолчанию — 500000.

Управление обнаружением воспроизведения на стороне службы с помощью кода

  1. Создайте элемент SecurityBindingElement для использования в привязке CustomBinding.

  2. С помощью свойства LocalServiceSettings получите ссылку на класс LocalServiceSecuritySettings и задайте свойства, как указано выше.

Управление обнаружением воспроизведения с помощью конфигурации для клиента или службы

  1. <Создайте customBinding>.

  2. Создайте элемент <security>.

  3. Создайте localClient Параметры> или <localService Параметры>.<

  4. Задайте следующие значение атрибутов (согласно необходимости): detectReplays, maxClockSkew, replayWindow и replayCacheSize. В следующем примере задаются атрибуты для обоих элементов: <localServiceSettings><localClientSettings> и<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>  
    

Пример

В следующем примере создается элемент SymmetricSecurityBindingElement с помощью метода CreateKerberosBindingElement и задает свойства воспроизведения привязки.

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

Область воспроизведения: только для режима безопасности сообщений

Обратите внимание, что следующие процедуры применяются только для режима безопасности сообщений. В режиме транспорта и в режиме транспорта с учетными данными сообщения воспроизведение обнаруживает транспортный механизм.

Примечания о безопасном диалоге

Для привязок, обеспечивающих безопасные диалоги, можно изменить эти настройки и для канала приложения, и для привязки начальной загрузки безопасного диалога. Например, можно отключить воспроизведение для канала приложения, но разрешить его для канала начальной загрузки, устанавливающего безопасный диалог.

Если сеансы безопасных диалогов не используются, средства обнаружения воспроизведения не гарантируют обнаружение воспроизведения в случаях использования фермы серверов и перезапуска процесса. Это относится к следующим привязкам, предоставляемым системой:

Компиляция кода

См. также