Подтвердить что ты не робот

Использование общего кэша в среде веб-фермы для обнаружения повторных атак в WCF

Я пытаюсь понять, как реализовать механизм обнаружения повторной атаки с помощью WCF в сценарии веб-фермы.

WCF предоставляет такой механизм обнаружения с использованием кеша nonce. Исправьте меня, если я ошибаюсь, но единственный способ предотвратить эту атаку в сценарии безопасности сообщений и веб-фермы - использовать кеш nonce, общий для серверов.

В WSE3.0 раньше можно было предоставлять пользовательские реализации nonce cache

http://msdn.microsoft.com/en-us/library/ff647945.aspx

но, похоже, в WCF нет никакого способа сделать это (нет параметров конфигурации, кроме того, что я нашел с Reflector, что класс NonceCache отмечен как запечатанным, так и внутренним).

Любые мысли?

4b9b3361

Ответ 1

Во-первых, для этого нет серебряных пуль. У каждого варианта есть свои недостатки. Microsoft рекомендует один из двух вариантов:

  • Использовать защиту режима сообщения с токенами контекста безопасности состояния (с включенной или без защищенной беседы)
  • Настройте службу на использование безопасности на уровне транспорта.

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

Как я уже говорил в своем предыдущем ответе, для этого нет серебряных пуль. Вот еще один вариант (который вы, возможно, уже рассмотрели), используя параметры detectReplays, maxClockSkew, replayWindow и replayCacheSize. Хотя я не уверен в его надежности в сценарии WebFarm, он должен работать, учитывая основную работу WCF. Вот краткая статья которая демонстрирует ее. Недостатком этой опции является то, что когда у вас есть клиент в другой часовой пояс на сервере, вы получите сбои, если ваш maxClockSkew не установлен, чтобы разрешить для разницы в часовых поясах.