Скрываю свою службу WCF?


У меня есть служба WCF, размещенная на IIS6, и я использую .net framework 3.5. Сайт, который у меня есть, находится в общественном достоянии, я имею в виду, что любой может получить доступ из любого места.

Мой вопрос в том, есть ли способ скрыть мою службу WCF? Я могу легко просмотреть источник моей страницы или точно знать путь моего сервиса за страницей...

http://hostname.MyServiceName.svc?wsdl, как я могу это скрыть?

3 4

3 ответа:

Согласившись с Дэвидом, что просто "затемнение" вашего сервиса-это меньше половины решения, вы, конечно, можете отключить

  • метаданные сервиса
  • http доступность вашего файла WSDL

Do to do, убедитесь, что ваш тег <service> не ссылается на тег <serviceBehavior>, который включает тег <serviceMetadata>.

Таким образом, этот будет предоставлять метаданные сервиса (включая WSDL по HTTP):

<behaviors>
   <serviceBehaviors>
      <behavior name="default">
         <serviceMetadata httpGetEnabled="True" />
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="default">
      ...
   </service>
</services>

При этом будет попадания любой службе метаданных (соблюдать удаление тега <serviceMetadata>):

<behaviors>
   <serviceBehaviors>
      <behavior name="nometadata">
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="nometadata">
      ...
   </service>
</services>

При удалении любых метаданных службы вы больше не сможете делать Add Service Reference из Visual Studio (или его эквивалента для любой другой системы разработки) - служба просто не скажет вам, что доступно - вы должны знать какой-то другой способ.

Это восходит к старой дискуссии "безопасность через неизвестность". Сокрытие вашей услуги-не самый лучший и эффективный способ ее защиты. Посмотрите на использование SSL и реальный метод аутентификации, а не просто пытаться "скрыть" его.

Также, чтобы ответить на ваш вопрос более прямо: если браузер знает ваш адрес службы (а он должен для того, чтобы ваши страницы вызывали его через JavaScript или что у вас есть), это легкая задача для любого, чтобы найти его. Независимо от того, сколько вы пытаетесь скрыть URL-адрес в ваш источник страницы, это простой вопрос мониторинга http-транзакций в Fiddler или Firebug, чтобы увидеть как адрес службы, так и формат / содержание запроса.

Почему вы хотите скрыть свою службу? кто-то считает это реальной проблемой, или вы просто пытаетесь защитить себя?

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