探讨WCF安全中的服务元数据保护

开发 后端
最近在做一个项目,应用了WCF进行分布式开发,中间还涉及到消息路由器等,好在有WCF提供了强大的基础支持,当然,本身也作了不少的扩展,本文将介绍对服务元数据保护的问题。

实际,我最关心的是WCF的安全问题,网上不少朋友介绍的WCF安全也是少得可怜,微软发布的WCFSecurityGUID好像讲得也只是入门级别的教程,离真正应用到项目中还是有很大的距离,这也让我萌发了分享的想法,今天先放出来占个位置吧,有反对的朋友砖头轻点,呵~,可以告诉你,WCF的安全里,有很多的小秘密,当然还是要告诉你,并且有此小秘密是要自己去体验后才知道,在博客排版方面,李会军(军哥)让人感觉最舒服,在解说方面,军哥也是以简洁著称,我在这里也学习一下,一起简洁吧,我希望以后的WCF安全探讨里,一次只讲一个小内容好了~

WCF安全概述

WindowsCommunicationFoundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型(摘自MSDN),在分布式环境下的WCF安全问题尤为重要,如果你觉得使用了WCF默认的安全措施可以让你高枕无忧,那明天你可就以回家种田了,当然,对于学习来说,足够了~,但我们讲的是真正的项目应用,WCF在各种协议下的安全提供和保证是不尽相同的。

背景

某天,经理老陈对程序员小李说:小李,我们公司外包到一个项目,但是客户要求采用分布式部署,现在项目快接近尾声了,由于我们采用的是WCF,所以在部署的时候出现了一点问题,我们的服务好像谁都能访问得到啊,这是为什么呢?

WCF安全问题呈现

小李***件事就是去查看了服务配置文件,真的是不看不知道,一看吓一跳,原来开发WCF时,采用的都是默认的配置,全是自动生成的代码,没有经过任何的改动,一想到项目将会以这种姿态交付,小李着实捏了一把汗。

  1. Code  
  2. <services> 
  3. <servicenameservicename="WcfServiceLibrary2.Service1"behaviorConfiguration="WcfServiceLibrary2.Service1Behavior"> 
  4. <host> 
  5. <baseAddresses> 
  6. <addbaseAddressaddbaseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary2/Service1/"/> 
  7. </baseAddresses> 
  8. </host> 
  9. <endpointaddressendpointaddress=""binding="wsHttpBinding"contract="WcfServiceLibrary2.IService1"> 
  10. <identity> 
  11. <dnsvaluednsvalue="localhost"/> 
  12. </identity> 
  13. </endpoint> 
  14. <endpointaddressendpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange"/> 
  15. </service> 
  16. </services> 
  17. <behaviors> 
  18. <serviceBehaviors> 
  19. <behaviornamebehaviorname="WcfServiceLibrary2.Service1Behavior"> 
  20. <serviceMetadatahttpGetEnabledserviceMetadatahttpGetEnabled="True"/> 
  21. <serviceDebugincludeExceptionDetailInFaultsserviceDebugincludeExceptionDetailInFaults="False"/> 
  22. </behavior> 
  23. </serviceBehaviors> 
  24. </behaviors> 

解决之道

小李***件事就是把配置文件给修改好了,接着解决了困扰老陈许久的问题。

1、删除元数据交换终结点信息

  1. <endpointaddressendpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange"/> 

2、将http协议获取元数据重置为:false

  1. <serviceMetadatahttpGetEnabledserviceMetadatahttpGetEnabled="false"/> 

3、一般我们都会在开发时配置为元数据据可发现,但是切记,发布你的服务前,一定要删除了,目前,服务在一定范围上得到了保护

4、最终配置如下

  1. <services> 
  2. <servicenameservicename="WcfServiceLibrary2.Service1"behaviorConfiguration="WcfServiceLibrary2.Service1Behavior"> 
  3. <host> 
  4. <baseAddresses> 
  5. <addbaseAddressaddbaseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary2/Service1/"/> 
  6. </baseAddresses> 
  7. </host> 
  8. <endpointaddressendpointaddress=""binding="wsHttpBinding"contract="WcfServiceLibrary2.IService1"> 
  9. <identity> 
  10. <dnsvaluednsvalue="localhost"/> 
  11. </identity> 
  12. </endpoint> 
  13. </service> 
  14. </services> 
  15. <behaviors> 
  16. <serviceBehaviors> 
  17. <behaviornamebehaviorname="WcfServiceLibrary2.Service1Behavior"> 
  18. <serviceDebugincludeExceptionDetailInFaultsserviceDebugincludeExceptionDetailInFaults="False"/> 
  19. <serviceDebugincludeExceptionDetailInFaultsserviceDebugincludeExceptionDetailInFaults="False"/></behavior></serviceBehaviors></behaviors> 

【编辑推荐】

  1. 使用ASP.NET AJAX调用WCF服务项模板
  2. 详解自定义托管宿主WCF解决方案开发配置过程
  3. 详解WCF可扩展框架中的行为扩展
  4. WCF中通过Dispose有效实现重用
  5. WCF开发基础
责任编辑:彭凡 来源: cnblogs
相关推荐

2009-12-22 16:14:01

WCF服务元数据

2009-12-21 16:37:41

WCF获取服务元数据

2009-11-06 10:01:07

WCF服务元数据

2010-03-02 09:32:54

WCF服务消息

2009-12-22 18:24:13

WCF面向服务

2009-11-09 17:30:20

WCF元数据

2009-11-06 10:45:47

WCF服务元数据交换

2009-11-09 16:14:49

WCF服务元数据

2010-02-22 11:02:06

WCF元数据

2009-11-09 16:25:24

WCF Data Co

2010-02-24 10:41:28

WCF服务保护

2010-02-26 14:12:27

WCF元数据

2010-03-02 09:39:11

保护WCF服务

2022-03-23 18:57:11

数据安全安全工具

2009-11-06 10:37:57

配置WCF服务

2009-12-02 09:21:04

PHP数据过滤

2010-03-02 10:50:57

WCF元数据交换

2010-09-17 20:40:09

2013-04-15 11:04:48

2022-09-08 15:18:03

数据安全犯罪
点赞
收藏

51CTO技术栈公众号