Как включить обнаружение повтора сообщений
Атака воспроизведения заключается в том, что злоумышленник копирует поток сообщений между двумя сторонами и воспроизводит его для одной или нескольких сторон. Если не приняты ответные меры, атакованные компьютеры обрабатывают этот поток как надлежащие сообщения, что приводит к ряду негативных последствий, таких как повторные заказы одного элемента.
Дополнительные сведения об обнаружении воспроизведения сообщений см. в разделе Обнаружение воспроизведения сообщений.
В следующей процедуре показаны различные свойства, с помощью которых можно управлять обнаружением воспроизведения, используя Windows Communication Foundation (WCF).
Управление обнаружением воспроизведения на стороне клиента с помощью кода
Создайте элемент SecurityBindingElement для использования в привязке CustomBinding. Дополнительные сведения см. в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement. В следующем примере используется объект SymmetricSecurityBindingElement, созданный с помощью объекта CreateKerberosBindingElement класса SecurityBindingElement.
С помощью свойства LocalClientSettings получите ссылку на класс LocalClientSecuritySettings и задайте некоторые из следующих свойств согласно необходимости:
DetectReplay. Логическое значение. Управляет тем, пытается ли клиент обнаружить воспроизведение сообщений сервера. Значение по умолчанию — true.
MaxClockSkew. Значение TimeSpan. Задает максимальную разницу по времени, допускаемую механизмом обнаружения воспроизведения между клиентом и сервером. Механизм безопасности проверяет отправленную отметку времени и определяет, не слишком ли давно она отправлена. Значение по умолчанию — 5 минут.
ReplayWindow. Значение TimeSpan. Задает максимальное время жизни сообщения в сети с момента его отправки сервером (через промежуточные узлы), прежде чем оно доставляется клиенту. Клиент отслеживает подписи сообщений, отправленных в течение последнего промежутка времени ReplayWindow, с целью обнаружения воспроизведения.
ReplayCacheSize. Целочисленное значение. Клиент сохраняет подписи сообщений в кэше. Этот параметр задает максимальное количество подписей, которое может храниться в кэше. Если количество сообщений, отправленных в пределах последнего окна воспроизведения, достигает предела кэша, новые сообщения отклоняются, пока не будет достигнут предел по времени для самых старых подписей в кэше. Значение по умолчанию — 500000.
Управление обнаружением воспроизведения на стороне службы с помощью кода
Создайте элемент SecurityBindingElement для использования в привязке CustomBinding.
С помощью свойства LocalServiceSettings получите ссылку на класс LocalServiceSecuritySettings и задайте свойства, как указано выше.
Управление обнаружением воспроизведения с помощью конфигурации для клиента или службы
Создайте привязку customBinding Element.
Создайте элемент <security>.
Создайте localClientSettings element или localServiceSettings element.
Задайте следующие значение атрибутов (согласно необходимости): detectReplays, maxClockSkew, replayWindow и replayCacheSize. В следующем примере задаются атрибуты для обоих элементов: <localServiceSettings><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 Function CreateSymetricBindingForClient() 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
private SecurityBindingElement CreateSymetricBindingForClient()
{
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;
}
Область воспроизведения: только для режима безопасности сообщений
Обратите внимание, что следующие процедуры применяются только для режима безопасности сообщений. В режиме транспорта и в режиме транспорта с учетными данными сообщения воспроизведение обнаруживает транспортный механизм.
Примечания о безопасном диалоге
Для привязок, обеспечивающих безопасные диалоги, можно изменить эти настройки и для канала приложения, и для привязки начальной загрузки безопасного диалога. Например, можно отключить воспроизведение для канала приложения, но разрешить его для канала начальной загрузки, устанавливающего безопасный диалог.
Если сеансы безопасных диалогов не используются, средства обнаружения воспроизведения не гарантируют обнаружение воспроизведения в случаях использования фермы серверов и перезапуска процесса. Это относится к следующим привязкам, предоставляемым системой:
Привязка WSHttpBinding, в которой свойству EstablishSecurityContext задано значение false.
Компиляция кода
Для компиляции кода требуются следующие пространства имен.
См. также
Справочник
LocalClientSecuritySettings
LocalServiceSecuritySettings
Основные понятия
Безопасные диалоги и безопасные сеансы
Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement