Скрытие моего сервиса WCF? - PullRequest
4 голосов
/ 05 декабря 2010

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

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

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

Ответы [ 3 ]

11 голосов
/ 05 декабря 2010

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

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

Делайте, чтобы убедиться, что ваш тег <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 (или ее эквивалент для любой из других систем разработки) - служба просто не скажет вам, что доступно - ты должен знать другой способ.

5 голосов
/ 05 декабря 2010

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

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

0 голосов
/ 01 октября 2012

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

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

...