文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程XML/Soap构建安全的Xml Web Service系列(一)
精品推荐
特别推荐
·跟我学XML和XSL
·XHTML教程,简单认识XHTML基础知识
·XML轻松学习手册
·XSL/XML网页制作入门,入门到精通
·用XML+JSP实现网页内容动态显示的方案
·将XML结点转换成JAVABEAN并存入数据库
·XML入门教程:XML 浏览器支持
·XHTML 1.0:标记新的开端
·什么是 XML Web Service
·什么是XML
·XML技巧五则
·新兴XML处理方法VTD-XML介绍
·一个简单的基于XML的模块集成框架
·XML数据库中几个容易混淆的概念
·用Flash和XML来构造一个聊天室
热点TOP10
·自定义应用程序配置文件(app.config)
·XML轻松学习手册
·关于web.xml配置的详细说明
·跟我学XML和XSL
·XML-RPC规范(中文版)
·从XML中读取数据到内存的实例
·XML 增、删、改和查示例
·ASP.NET中应用XML技术实现Web报表打印
·利用XML实现通用WEB报表打印实际使用中的例子
·新手教程:手把手教你学Web Services 教程
·基于Lucene/XML的站内全文检索解决方案
·用XMLHTTP Post/Get HTML页面时的中文乱码之完全Script解决方案
·证券和银行之间转帐系统的设计
·XML 数据的编码方式
·用XML+JSP实现网页内容动态显示的方案
·XML-RPC入门
·用 PHP5 轻松解析 XML
·JSP取得在WEB.XML中定义的参数
·XML文档对象模型手册
·什么是 XML Web Service

构建安全的Xml Web Service系列(一)

日期:2007年6月22日 作者: 查看:[大字体 中字体 小字体]


  Xml Web Service 从诞生那天就说自己都么都么好,还津津乐道的说internet也会因此而进入一个新纪元,可5年多来,Xml Web Service并没有像当初宣扬的那样火起来,尽管在一些领域之内,也有人牛刀小试,但从整体而言,Service还并没有得到广泛的应用,原因有很多,有一些来源于目前各大厂商都坚持自己的service标准,不能形成统一,也有对现有的稳定系统不愿进行更改的原因,但还包括web service本身的原因,最明显的应该是两个:1) 安全,2)性能。毕业设计的时候,写的是高性能web service的开发和应用,下面,我想用几篇文章来阐述一下有关xml web service安全的几个解决方案。欢迎各位大虾来砸。

  如何解决网络服务的安全问题,我主要从以下两个层面进行分析:

  1) 确保调用者的合法身份-保证来源的合法

  2) 在传输中不被非法监听和篡改。

  当然还会有其他方面的安全隐患,希望大家能多多提出,我也好能进一步总结。

  如果您想更快的掌握本文提到的技术,您以前必须了解xml web service的工作原理,并且亲自开发并部署或者使用过Xml web service,只是您并不相信您部署的xml web service是安全的。

  本节先介绍一种最为简单的确保调用者合法的解决方案-将用户名和密码附加在Soap消息头部,在服务器端进行用户名密码验证。这种方式从解决了原网络服务不能针对特定对象产生响应的问题。但因为仍以明文格式

  传输,所以不能有效地防止信息在传输过程中被偷窥,篡改或伪造。

  如果您以前已经使用了这种方法,请略过此篇文章,我下篇文章中将讲述其他方式,更加合理的解决方案,欢迎您继续关注。

  下面是实现此种解决方案的步骤,请您一步一步来

  第一步:首先您需要创建一个Xml Web Service的服务项目,创建方法如下

  打开visual studio 2005,在起始页上点击创建项目,选择visual C#中的Asp.Net web 服务应用程序,输入项目名称

  第二步:在该项目中创建一个扩展的SoapHeader对象MySoapHeader,如下

以下是引用片段:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Services.Protocols;

namespace WebService1
{
    public class MySoapHeader:SoapHeader
    {
        private string _userName;
        private string _pwd;
        /**//// <summary>
        /// 用户名
        /// </summary>
        public string UserName
        {
            get
            {
                return _userName;
            }
            set
            {
                _userName = value;
            }
        }
        /**//// <summary>
        /// 密码
        /// </summary>
        public string Pwd
        {
            get
            {
                return _pwd;
            }
            set
            {
                _pwd = value;
            }
        }
    }
}

  第三步:创建一个Xml Web Service,另添加一个要求使用SoapHeader的网络服务方法

以下是引用片段:

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;

namespace WebService1
{
    /**//// <summary>
    /// Service1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {
        public MySoapHeader header = new MySoapHeader();       
        [WebMethod]
        [SoapHeader("header")]      
        public string HelloWorld()
        {
            if (header == null)
            {
                return "您没有设置SoapHeader,不能正常访问此服务!";
            }
            if (header.UserName != "jillzhang" header.Pwd != "123456")
            {
                return "您提供的身份验证信息有误,不能正常访问此服务!";
            }
            return "Hello World";
        }
    }
}

  第四步:创建一个调用Xml Web Service的Console应用程序,如下:

以下是引用片段:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
      
        static void Main(string[] args)
        {
            localhost.Service1 ws = new ConsoleApplication1.localhost.Service1();
            //ws.MySoapHeaderValue = new ConsoleApplication1.localhost.MySoapHeader();
            //ws.MySoapHeaderValue.UserName = "jillzhang";
            //ws.MySoapHeaderValue.Pwd = "123456";
            Console.WriteLine(ws.HelloWorld());
        }
    }
}

  下面的分析,对于大家来说,应该是最重要的,很多人不清楚SoapHeader的工作原理,为什么这么怪异的写法竟能产生神奇的效果,下面我将不同情形下的Soap消息解析出来,大家仔细观察这个信息,并可以清晰地掌握了SoapHeader的工作原理了.

  首先,先看看没有设置SoapHeader的情况下,Soap消息为:

以下是引用片段:

-----Soap请求 在 2007年05月22日 12时39分40秒
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorld xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope>

-----Soap响应 在 2007年05月22日 12时39分40秒
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorldResponse xmlns="http://tempuri.org/"><HelloWorldResult>您提供的身份验证信息有误,不能正常访问此服务!</HelloWorldResult></HelloWorldResponse></soap:Body></soap:Envelope>

  再看看在设置了SoapHeader之后的Soap的请求和响应信息

以下是引用片段:

-----Soap请求 在 2007年05月22日 12时42分20秒
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Header><MySoapHeader xmlns="http://tempuri.org/"><UserName>jillzhang</UserName><Pwd>123456</Pwd></MySoapHeader></soap:Header><soap:Body><HelloWorld xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope>

-----Soap响应 在 2007年05月22日 12时42分20秒
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorldResponse xmlns="http://tempuri.org/"><HelloWorldResult>Hello World</HelloWorldResult></HelloWorldResponse></soap:Body></soap:Envelope>


  点正是通过这个节点,SoapMessage将信息传递给了网络服务端,网络服务端便可以从中解析出来,并加以处理,从上面的SoapMessage中,我们也看出,用户名和密码是以明文的格式传输的,这样,SoapHeader就更像Http协议中的Cookie了,我们可以参考Cookie的使用,来扩展SoapHeader,让它变得更加安全些,但总的看来,通过直接设置SoapHeader的方法提高安全性还是有一定限制的。在安全不是特别重要的应用情形中,推荐采用此种解决方案,因为它方便快捷,灵活易用。

  下一节,我将介绍一下,如何获取SoapMessage.

(出处:清风网络学院






上一篇:帮人买电脑自保装机最高心法

下一篇:Photoshop辅助线和标尺的使用技巧

构建安全的Xml Web Service系列(一) 相关文章:
·IE浏览器再现严重安全漏洞 微软紧急发补丁程序
·不怕攻击 家庭上网必学八招安全绝招
·全面解决Generic host process for win32 services遇到问题需要关闭
·中小企业整体网络安全解决方案解析
·基础知识 初级黑客安全技术命令详解
·QQ空间篮球大图模块:科比系列【2】
·如何以安全模式启动计算机
·Windows 2003安全设置大全-IIS、终端服务、FTP、SQL的配置
·华为3com系列产品配置手册汇总
·企业局域网安全解决方案
构建安全的Xml Web Service系列(一) 相关软件:
·Kaspersky(卡巴斯基) Internet Security 安全套装 V6.0.2.621 中文版
·SQL Server 2000 基础系列课程视频
·自我按摩系列
·鬼古女悬疑系列
·共和国元帅传记系列-陈毅传
·中国国家地理(上中下) 高清晰的PDF书籍系列经典珍藏版
·共和国元帅传记系列-贺龙传
·共和国元帅传记系列-刘伯承传
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·共和国元帅传记系列-徐向前传

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot