博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web service调用的安全性
阅读量:7253 次
发布时间:2019-06-29

本文共 3280 字,大约阅读时间需要 10 分钟。

  最近在项目中开发了一个web service,开发完后发现一个很大的安全性问题,并且这个问题好像在旧的项目web service当中并没有注意点,那就是调用的安全性,只要知道URL的人都可以直接调用了,这样要是碰到有人恶意调用就挂了。

  后来查阅相关资料,发现了System.Web.Services.Protocols.SoapHeader这个东西,可以让用户必须通过指定口令来访问web服务接口。

1.定义SoapHeader派生类:

1 //   2 //定义自己的SoapHeader派生类   3 //   4 public class MySoapHeader : System.Web.Services.Protocols.SoapHeader 5 { 6     private string _UserID = string.Empty; 7     private string _PassWord = string.Empty; 8     //   9     //构造函数  10     //  11     public MySoapHeader()12     {13     }14     //  15     //构造函数  16     //  17     //用户ID  18     //加密后的密码  19     public MySoapHeader(string nUserID, string nPassWord)20     {21         Initial(nUserID, nPassWord);22     }23     #region 属性24     //  25     //用户名  26     //  27     public string UserID28     {29         get { return _UserID; }30         set { _UserID = value; }31     }32     //  33     //加密后的密码  34     //  35     public string PassWord36     {37         get { return _PassWord; }38         set { _PassWord = value; }39     }40     #endregion41     #region 方法42     //  43     //初始化  44     //  45     //用户ID  46     //加密后的密码  47     private void Initial(string nUserID, string nPassWord)48     {49         UserID = nUserID;50         PassWord = nPassWord;51     }52     //  53     //验证用户名密码是否正确  54     //  55     //用户ID  56     //加密后的密码  57     //返回的错误信息  58     //
用户名密码是否正确
59 private bool IsValid(string nUserID, string nPassWord, out string nMsg)60 {61 nMsg = "";62 try63 {64 //判断用户名密码是否正确 65 if (nUserID == "admin" && nPassWord == "admin")66 {67 return true;68 }69 else70 {71 nMsg = "对不起,你无权调用此Web服务。";72 return false;73 }74 }75 catch76 {77 nMsg = "对不起,你无权调用此Web服务。";78 return false;79 }80 }81 // 82 //验证用户名密码是否正确 83 // 84 //
用户名密码是否正确
85 public bool IsValid(out string nMsg)86 {87 return IsValid(_UserID, _PassWord, out nMsg);88 }89 #endregion90 }

2.定义必须进行SoapHeader验证的web service接口方法:

///     /// Service1 的摘要说明    ///     [WebService(Namespace = "http://tempuri.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    [System.ComponentModel.ToolboxItem(false)]    public class Service1 : System.Web.Services.WebService    {        public MySoapHeader soapheader = new MySoapHeader();        [SoapHeader("soapheader")]        [WebMethod(Description = "测试", EnableSession = true)]        public string HelloWorld()        {            string msg = string.Empty;            if (soapheader.IsValid(out msg))            {                return msg;            }            ...        }    }

3.最后一个问题:客户端怎样调用带有SoapHeader验证的web service接口方法呢?如下

yWebReference.Service1 service = new MyWebReference.Service1();//创建service对象MyWebReference.MySoapHeader head = new MyWebReference.MySoapHeader();//创建SoapHeader对象//设置SoapHeader变量head.UserID = "admin";head.PassWord = "admin1";service.MySoapHeaderValue = head;string s = service.HelloWorld();//调用web方法

到此完成,通过SoapHeader强行调用web service必须先进行口令验证,通过验证才能调用,这样就可以简单而安全地解决问题了。

转载于:https://www.cnblogs.com/Bay-Max/p/3605272.html

你可能感兴趣的文章
艾伟:.NET : 如何保护内存中的敏感数据?
查看>>
艾伟_转载:[原创]再谈IIS与ASP.NET管道
查看>>
一起谈.NET技术,实战ASP.NET大规模网站架构:Web加速器
查看>>
微软等厂商高管谈安全云面临的挑战
查看>>
RSA大会主角 云安全
查看>>
微软BI 之SSAS 系列 - 多维数据集维度用法之三 多对多维度 Many to Many
查看>>
C#Winform程序如何发布并自动升级(图解)
查看>>
Linux环境下VI/VIM编辑文件时无权限保存的解决方法
查看>>
【object-c基础】object-c基础之二:property,assign,copy,retain,release
查看>>
Oracle--plsql游标创建和使用
查看>>
Android自动化测试之使用java调用monkeyrunner
查看>>
Android API之android.os.Parcelable
查看>>
测试JdbcTemplate执行SQL语句和存储过程
查看>>
tableview 里面的 必须配套使用的方法
查看>>
ClassLoader工作机制
查看>>
子查询
查看>>
Android使用FFMpeg实现推送视频直播流到服务器
查看>>
(转)8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset
查看>>
电信网络拓扑图自动布局之总线
查看>>
微信开放平台开发——网页微信扫码登录(OAuth2.0)
查看>>