【问题标题】:Hiding my WCF service?隐藏我的 WCF 服务?
【发布时间】:2010-12-05 19:58:31
【问题描述】:

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

我的问题是,有没有办法隐藏我的 WCF 服务?我可以轻松查看我的页面的源代码或确切知道我的服务在页面后面的路径...

http://hostname.MyServiceName.svc?wsdl,怎么隐藏?

【问题讨论】:

    标签: wcf wcf-binding svc


    【解决方案1】:

    同意大卫的观点,仅仅“隐藏”你的服务还不到解决方案的一半,你当然可以关闭

    • 服务元数据
    • 您的 WSDL 文件的 http 可用性

    要做的事,确保您的<service> 标记没有引用包含<serviceMetadata> 标记的<serviceBehavior>

    所以这暴露服务元数据(包括 HTTP 上的 WSDL):

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

    虽然这将不会暴露任何服务元数据(注意 &lt;serviceMetadata&gt; 标记的删除):

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

    删除任何服务元数据时,您将无法再在 Visual Studio(或任何其他开发系统的等效项)中执行 Add Service Reference - 服务不会告诉您可用的内容- 你必须知道其他方式。

    【讨论】:

    • you have to know some other way 还有什么方法可以知道?
    • @Chicagoland:您可以提供书面文档,或者您可以为您的服务提供现成的客户端代理,例如.NET 程序集
    • 好主意;我没想到。尽管如此,嗅探 AJAX 调用或其他请求仍会显示方法、签名等。
    • @David Lively:是的,当然 - 我同意你的观点 - 这是通过默默无闻实现的安全性,从来没有真正能很好地防御入侵者 - 它充其量只是第一步。 ..
    【解决方案2】:

    这可以追溯到旧的“通过默默无闻的安全”辩论。隐藏您的服务并不是保护它的好方法或有效方法。考虑使用 SSL 和真正的身份验证方法,而不是仅仅试图“隐藏”它。

    另外,为了更直接地回答您的问题:如果浏览器知道您的服务地址(并且它必须让您的页面通过 JavaScript 或其他方式调用它),那么任何人都可以轻松找到它。无论您如何尝试在页面源中隐藏 URL,在 Fiddler 或 Firebug 中监视 HTTP 事务以查看服务地址和请求的格式/内容都是一件简单的事情。

    【讨论】:

    • 我想补充一点,如果某个机器人有机会发现它。
    【解决方案3】:

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

    有很多策略可以保护自己……但如果只是随意的“不希望人们使用我的服务”,那么只需不时更改 API。没有什么比随机变化的 API 更能说明“停止”了。

    【讨论】:

    • 如果需要保护服务,那么我不相信一些随机切换真的可以做到这一点。你可能只是在烦自己。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多