攻破WebService,WCF的改进

本文探讨了WebService的安全性问题,包括客户端和服务端的调用方式及存在的风险,并通过具体示例展示了如何进行服务端调用,同时提出了加密作为解决安全问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、WebService的调用

WebService的调用可以分为两种,一种是客户端调用,比如在浏览器中用Javascript或者应用程序调用;一种是服务端调用,这种用得比较多,很常见。这里要说的是明文调用,相信很多服务都没用WSE加密。

二、客户端调用

调用方式就不多说了,网上很多,但是傻子也知道这种调用有很大的缺陷。因为WebService是明文的,除非是很不重要的数据,这样调用纯粹就是找死。是个人就有办法攻破。要么是修改掉重要数据,要么就是数据无阻碍地被复制。加密对这种方式也不太好使。

三、服务端调用

首先建立一个WebService。

/// <summary>
///TestService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
public class TestService : System.Web.Services.WebService {

    
public TestService () {

        
//如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 
    }

    [WebMethod]
    
public int Add(int x, int y) {
        
return x + y;
    }
    
}

这里写个asp脚本调用,C#的调用方式太麻烦了。

<%
dim url
url 
= "http://××××××××××/TestService.asmx/Add"
dim postdata
postdata 
= "x=1&y=3"
dim xmlhttp
Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open 
"POST",url,false
xmlhttp.setRequestHeader 
"Content-Type""application/x-www-form-urlencoded"
xmlhttp.setRequestHeader 
"Content-Length",LEN(postdata)
xmlhttp.send(postdata)
Response.Write xmlhttp.Status 
& "&nbsp;"
Response.Write xmlhttp.StatusText
Set xmlhttp = Nothing
%
>

这样就完成服务端的调用了。

如何攻破服务端调用呢?要是你攻破对方的服务器,那就没什么好说的了。只是本机调用,也没太大的问题。跨机器,分布式调用,就有办法了。假设,现在有A,B两台服务器,A服务器提供了WebService,B服务器调用。
1、A,B不在一个局域网
A,B不在一个局域网,嘿嘿,机会来了吧?我的机器在局域网中,无法监听外网的数据。但是如果你是拨号上网的话,那还犹豫什么?监听就行了,当然,垃圾数据比有用的数据多多了啊。
2、A,B在同一局域网
A,B在一个局域网,那有什么办法?先看看,假如我有一台服务器C也在这个局域网中。那么,我就可以监听到数据了。来看看一次WebService调用监听到的数据。
先是一次TCP通信,三次握手,没什么好说的。三次握手完后就是POST。
2008121714060967.gif
下来是POST的数据。
2008121714082548.gif
收到数据。
2008121714093081.gif
数据全出来了!!中间的确认什么的就跳过了。明文的WebService传输是不是有很大的问题啊?不要想黑客和你的服务器不在一个局域网里。攻不破你的服务器,但是在这个局域网中的服务器,攻陷的机会要大很多。另外实在不行,托管个服务器进去,嘿嘿。那本来和你是一个局域网的用户,要攻破你的话,太esay了啊!
四、解决方案
加密,什么也不用说了。
五、WCF
我对WCF不是很熟啊。简单地看了一下,WCF的调用需要身份验证,如果去掉身份验证的话,传输的数据也是密文的。对这个不是很熟,就不讨论这个了。密文传输应该是一个改进。网上都说WCF的效率也提高了,不过从截包情况看,网络传输方面肯定没有提高。WCF不但使用了加密,而且确认的次数也比WebService的多。通信效率连WebService都不如。

转载于:https://www.cnblogs.com/birdshover/archive/2008/12/17/1356799.html

### 泛微系统中使用WCF Webservice的方法 #### 创建并配置WCF服务端 为了使泛微系统能够通过Web Service与其他应用程序交互,需先创建一个基于Windows Communication Foundation (WCF)的服务。此过程涉及定义服务契约和服务实现。 ```csharp // 定义服务接口 [ServiceContract] public interface IWeaverService { [OperationContract] string GetData(int value); } // 实现服务类 public class WeaverServiceImpl : IWeaverService { public string GetData(int value){ return "You entered: " + value; } } ``` 在上述代码片段中,`IWeaverService` 接口声明了一个名为 `GetData` 的操作合同[^1]。而具体的业务逻辑则由 `WeaverServiceImpl` 类来完成。 #### 配置web.config文件支持WCF Web Services 为了让客户端可以访问到这个新建立起来的WCF web service,在服务器端还需要适当修改项目的配置文件(web.config),以便启用HTTP绑定以及设置必要的安全性和行为参数: ```xml <system.serviceModel> <services> <service name="YourNamespace.WeaverServiceImpl"> <!-- 添加终结点 --> <endpoint address="" binding="basicHttpBinding" contract="YourNamespace.IWeaverService"/> </service> </services> <behaviors> <serviceBehaviors> <behavior> <!-- 启用元数据发布 --> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> ``` 这段XML配置使得该WCF服务可以通过基本HTTP协议被调用,并允许外部获取其元数据描述信息[^2]。 #### 在泛微平台集成WCF Client 当一切准备就绪之后,就可以开始考虑如何让泛微应用去消费这些已经发布的webservice了。通常情况下会采用添加服务引用的方式来自动生成代理对象,从而简化开发工作量。 假设现在有一个运行中的WCF服务位于http://example.com/WeaverService.svc,则可以在Visual Studio环境中右键点击项目->“添加”-> “连接的服务”,输入地址后按照提示完成整个流程即可获得相应的ClientProxy类用于发起请求[^3]。 ```csharp using System.ServiceModel; class Program{ static void Main(string[] args){ BasicHttpBinding myBinding = new BasicHttpBinding(); EndpointAddress endPoint = new EndpointAddress("http://example.com/WeaverService.svc"); using(var client=new WeaverServiceClient(myBinding,endPoint)){ Console.WriteLine(client.GetData(10)); } } } ``` 以上就是关于如何利用WCF技术构建WebService并与泛微OA系统对接的一个简单介绍和实例说明[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值