热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Webservice?安全性访问

1.访问安全性WebService对于我们来说并不陌生,在很多地方我们都会使用到它,它为我们带来了很多方便,同时解决了多平台之间的通讯协议

1.访问安全性

    WebService对于我们来说并不陌生,在很多地方我们都会使用到它,它为我们带来了很多方便,同时解决了多平台之间的通讯协议问题等等,因为WebService是以一种Http请求和Xml响应的方式来达成多平台之间的接入。这种方式我们一般称之为‘接口’。这里需要说明的是:所谓平台是指开发平台(例如ASP.NET和Java等开发平台)和站点平台(例如淘宝网站和支付宝网站)。就因为WebService给我们带来种种方便,导致有很多’同学‘大量的、无选择性的使用WebService,从而易导致对系统性能的降低,同时,如未对WebService访问安全性做防御的话极有可能对系统安全性造成的致命的漏洞。因为只要知道WebService的Http请求地址,那任何一个客户端都可以进行请求。而WebService将会面临的有它所认可的客户端和不认可的客户端请求。

  我们来举个例子,例如:中国移动公司对外提供了一个发送手机短信的WebService接口,并此请求地址已被公开。那任何一个客户端都可以请求这个WebService。当这个接口没有验证请求的客户端身份的话,那就意味着任何客户端都可调用此接口进行发送短信。这样移动不亏死才怪。所以它就会在每个客户端请求过来时先验证请求的客户端是否是跟此接口达成了一种合法请求协议的客户端。如果是合法请求则为此请求提供服务,否则对请求一概否决。

  那我们如何来判断这些请求中哪些是合法、哪些是非法呢?以本人对WebService的开发,总结了以下比较好的三种方式验证,并每种验证处于不同安全级别,也可说不同使用场合。

  1.级别:低

     使用场合:在本站点使用,不对外开放。

     验证方式:通过验证码验证

     具体说明:我们可在webService服务端配置一段任意字符串(最好是MD5加密),然后客户端发送请求过来时,同时将验证码发送服务端,然后再跟服务端的验证码进行比较来判断是否是合法请求。例如:

 

代码
[WebMethod(Description = "发送短信")]
public bool SendSms(string authString,string mobiles, string smsContent, DateTime? sendTime, ref string error)
{
//根据客户端发送的验证码进行根服务器的验证码进行匹配
if (authString != "980017891ff67cf8a20f23aa810e7b5a")
{
//不是合法客户端请求时,将拒绝对此请求提供服务
error = "非法请求,验证身份失败";
return false;
}
//如果是合法请求,则继续为此请求提供服务
using (SmsFacade smsFacade = new SmsFacade())
{
if (!smsFacade.SendSms(smsContent, mobiles, sendTime))
{
error
= smsFacade.PromptInfo.CustomMessage;
return false;
}
}
return true;
}

 

 

  2.级别:中上

    使用场合:提供第三方平台使用,完全开发性

    验证方式:通过请求的客户端IP验证

  具体说明:我们可以将合法请求的客户端IP保存在服务端(可存入数据库等方式保存),当客户端发送请求过来时,可根据客户端的IP在服务端保存的IP中验证是否为合法请求。例如:

 

代码
///
/// 发送短信服务
///

/// 接收的手机号码
/// 短信内容
/// 发送时间,为空则立刻发送
/// 当请求失败时的详细失败原因
///
[WebMethod(Description = "发送短信")]
public bool SendSms(string mobiles, string smsContent, DateTime? sendTime, ref string error)
{
//根据客户端请求的IP进行跟服务端所配置的IP进行验证(IP可配置在文件中或数据库)
if (Context.Request.UserHostAddress != "218.18.69.86")
{
//不是合法客户端请求时,将拒绝对此请求提供服务
error = "非法请求";
return false;
}
//如果是合法请求,则继续为此请求提供服务
using (SmsFacade smsFacade = new SmsFacade())
{
if (!smsFacade.SendSms(smsContent, mobiles, sendTime))
{
error
= smsFacade.PromptInfo.CustomMessage;
return false;
}
}
return true;
}

 

 

 

 

  3.级别:高

   使用场合:提供第三方平台使用,完全开发性

   验证方式:身份登陆验证

  具体说明:我们可以在服务端建一张第三方用户信息表,包含用户账号和密码等相关信息。客户端请求时,必须将账号和密码发送到服务端进行登陆,来验证是否为合法请求。例如:

 

代码
[WebMethod(Description = "发送短信")]
public bool SendSms(string userCode, string userPwd, string mobiles, string smsContent, DateTime? sendTime, ref string error)
{
//先根据客户端发送用户账号和密码登陆
UserFacade userFacade = new UserFacade();
if (!userFacade.Login(userCode, userPwd))
{
//登陆失败,将拒绝对此请求提供服务
error = "非法请求,登陆失败";
return false;
}
using (SmsFacade smsFacade = new SmsFacade())
{
if (!smsFacade.SendSms(smsContent, mobiles, sendTime))
{
error
= smsFacade.PromptInfo.CustomMessage;
return false;
}
}
return true;
}
 


推荐阅读
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 本文详细介绍了如何在Azure DevOps Services和Azure DevOps Server中调整时区设置,以及这些设置对不同功能的影响。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
author-avatar
陈上意535
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有