隐藏我的WCF服务?

隐藏我的WCF服务?,wcf,wcf-binding,svc,Wcf,Wcf Binding,Svc,我在IIS6上有一个WCF服务,我正在使用.net framework 3.5。我的网站是在公共领域,我的意思是任何人都可以从任何地方访问 我的问题是,有没有办法隐藏我的WCF服务?我可以很容易地查看我的页面源代码,或者确切地知道页面后面我的服务路径 http://hostname.MyServiceName.svc?wsdl,我该如何隐藏它?这又回到了古老的“通过模糊实现安全”的辩论。隐藏你的服务不是一个好的或有效的方法来保护它。研究使用SSL和真正的身份验证方法,而不仅仅是试图“隐藏”它 另

我在IIS6上有一个WCF服务,我正在使用.net framework 3.5。我的网站是在公共领域,我的意思是任何人都可以从任何地方访问

我的问题是,有没有办法隐藏我的WCF服务?我可以很容易地查看我的页面源代码,或者确切地知道页面后面我的服务路径

http://hostname.MyServiceName.svc?wsdl
,我该如何隐藏它?

这又回到了古老的“通过模糊实现安全”的辩论。隐藏你的服务不是一个好的或有效的方法来保护它。研究使用SSL和真正的身份验证方法,而不仅仅是试图“隐藏”它


另外,为了更直接地回答您的问题:如果浏览器知道您的服务地址(并且必须知道您的页面才能通过JavaScript或其他方式调用它),那么任何人都很容易找到它。无论您如何试图在页面源代码中隐藏URL,只需在Fiddler或Firebug中监视HTTP事务即可查看服务地址和请求的格式/内容

同意David的观点,仅仅“模糊”你的服务不到解决方案的一半,你当然可以关掉它

  • 服务元数据
  • WSDL文件的http可用性
要执行此操作,请确保您的
标记没有引用包含
标记的

因此,公开服务元数据(包括HTTP上的WSDL):


...
虽然这将不公开任何服务元数据(请注意删除
标记):


...

删除任何服务元数据时,您将无法再从Visual Studio(或任何其他开发系统的等效工具)中执行添加服务引用的操作-服务不会告诉您可用的内容-您必须知道其他方法。

为什么要隐藏服务?是有人发现这是一个真正的问题,还是你只是想保护自己


有很多保护自己的策略。。。但如果只是一个随意的“不想让人们使用我的服务”,那么就时不时地更改API。没有什么比随机变化的API更能说明“停止”了。

我想补充一点,如果有机会某个机器人会发现它。
你必须知道其他方法。
其他方法是什么?@Chicagoland:你可以提供书面文档,或者你可以为你的服务提供现成的客户端代理,例如,.NET Assembly好主意;我没有想到。不过,嗅探AJAX调用或其他请求会显示方法、签名等@davidlively:是的,当然-我同意你的看法-这是通过隐蔽性实现的安全性,这从来都不是抵御入侵者的好方法-这充其量只是第一步…如果服务需要安全性,那么我不相信一些随机切换真的能做到这一点。你可能只是在烦你自己。
<behaviors>
   <serviceBehaviors>
      <behavior name="default">
         <serviceMetadata httpGetEnabled="True" />
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="default">
      ...
   </service>
</services>
<behaviors>
   <serviceBehaviors>
      <behavior name="nometadata">
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="nometadata">
      ...
   </service>
</services>