2010-12-05 2 views
4

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

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

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

ответ

11

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

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

+0

да, пожалуйста. Отключите метаданные. – Cheeso 2010-12-05 21:58:17

+0

`вам нужно знать какой-то другой способ, что еще можно узнать? – 2010-12-06 00:15:39

5

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

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

+1

Я бы добавил, что с учетом того, что какой-нибудь бот обнаружит это. – 2010-12-05 20:05:28

-1

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

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

Смежные вопросы