首页 > 其他分享 >接口安全调用该怎么做?签名?证书?服务安全?

接口安全调用该怎么做?签名?证书?服务安全?

时间:2023-08-03 18:06:55浏览次数:28  
标签:调用 传输 数字签名 验证 接口 安全 参数 签名 数据


在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的BI库,各系统、各平台间数据的传输和调用变得非常普遍且非常重要;那么作为开发人员,我们不但要防止系统被攻击被入侵,我们还要确保数据的安全和完整。 


在内网传输和外网传输的数据对安全的要求一般是不同的,因为内网数据的传输得到了网络防火墙的保护,起到了隔绝外部攻击的作用,但也并非一定安全;相比之下,对外部开放的接口则需要做的更多更好。我们简单通过四种方式介绍下常见的调用鉴权方式: 


一、普通的参数验证(内网系统常用) 


2.1 简单参数验证 


通过ws接口方法中的参数,验证用于鉴权的参数的值是否正确,起到简单验证作用。如: 


public int GetNumberStatus(String Number,String sysPssword) {} 


这种接口方法可以说没有任何防御性,通过简单的抓包就可以得到参数中的password,进而篡改等等。 


2.2 请求对象中加帐号密码 


在请求参数较多的情况下,我们会选择把参数封装成一个对象,其中需要验证的部分作为对象的头信息,数据本身作为对象体。这种方式其实也是没有太大的防御作用,不过我们通过头信息的方式可以对接口进行权限控制。如: 


public Msgreqheader getMsgreqheader(){ 
   Msgreqheader header = new Msgreqheader(); 
   header.setOperidString( "admin" ); 
   header.setChannelidString ("chananl1" ); 
   return header; 
}

通过soap方式请求报文如: 


<messagereq> 
  <msgreqheader> 

      <operatorid>admin</operatorid> 

      <channelid>channel1</channelid> 

  </msgreqheader> 

  <msgbody> 
    <xxx></xxx> 

  </msgbody> 
</messagereq>

通过XML报文中的消息头的参数识别接口调用的验证以及权限。 


总结:这两种方式应用都非常的普遍,采用哪一种,需要根据请求的参数去判断,对接口安全要求低,数据安全要求低的系统可以采用。 


二、ws-security UsernameToken表头验证 


三、数字签名(digital signature) 


以前对安全验证以及数字认证方面的知识一直觉得讳莫如深,在最近接触的一个项目中,涉及到了数字签名的使用,从一开始我兴致勃勃的以为终于可以搞数字认证了,接触了才发现,原来只是需要数字签名,并没有用到数字认证(相对比较麻烦),其实也蛮好理解和开发。 


数字签名的使用,目前接触到的有两种方式,1、签名作为参数;2、全文签名 


3.1 签名作为参数 


在使用http或者soap传输数据的时候,签名作为其中一个参数,可以起到关键作用:1、鉴权(通过客户的密钥,服务端的密钥匹配);2、数据防篡改(参数是明文传输,将参数及密钥加密作为签名与服务器匹配);下面来分析下具体的方式: 


将请求参数中的各个键值对按照key的字符串顺序升序排列(大小写敏感),把key和value拼成一串之后最后加上密钥,组成key1value1key2value2PRIVATEKEY的格式,转成utf-8编码的字节序列后计算md5,作为请求的签名。计算出来的签名串应当全为小写形式。如果某个参数的值为空,则此参数不参与签名。 


下面举个例子。假设参数列表为: 


a 123 

b 帐号 

c 密码 

假设密钥为:123456 


则待签名的明文为:a123b帐号c密码123456 


将明文按utf-8取字节序列,并计算md5为:332ce52ed0a9686cc32bdd0eb45de577 


客户端调用的例子如: http://host:port/search?a=123&b=帐号&c=密码&&sign =332ce52ed0a9686cc32bdd0eb45de577 


注:因为md5加密是不可逆的,在服务端取到参数后按同样的规则进行匹配,起到了鉴权及数据完整性的作用。(HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。GET方式:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。因此对于GET提交时,传输数据就会受到URL长度的限制。) 


3.2 对象签名 


为了加深印象,可以互联网上用图文描述签名的文章来帮助理解, 原文地址 


当我们如通过ws进行较大数据的传输时,如一篇文章,一个长达1w个号码的号码集。同样可以通过签名的方式确保数据的完整性。简单地说: 

(1) 

 

1、对数据本身使用Hash函数生成摘要(digest),再通过上述讲到的私钥进行“数字签名”生成。 


(2) 

 

2、将该数字签名作为对象的属性传输到服务端。 


(3) 

 

3、服务端取得数据,对数据使用Hash函数得到摘要A,并将客户端请求的数字签名进行解密得到摘要B。 


4、对比摘要A及摘要B,如果两者一致,则可以确保该数据未被篡改。 


总结:这种方式的调用一般应用于重要数据的传输,如:淘宝与商家的支付接口、一些兑换平台的兑换接口等等都采用签名。 


四、数字认证(digital certificate) 

 


标签:调用,传输,数字签名,验证,接口,安全,参数,签名,数据
From: https://blog.51cto.com/u_6186189/6951556

相关文章

  • 接口相似数据结构复用率高?Apipost这招搞定!
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计过......
  • 子组件调用父组件方法带参数
    子组件调用父组件方法带参数父组件###template<DBTableSelectref="DBTableEdit"@customEvent="handleCustomEvent"@close="closedDrawDBTable"v-if="showDrawDBTable"/>###jsimportDBTableS......
  • 子组件调用父组件的方法
    父组件<importExcelref="importExcelEdit":disabled="ExcelDisabled"@closed="closedDrawExcel"v-if="showDrawExcel":labelItem="objectTypeKey"tabLabel="手动打标配......
  • 国标GB28181安防视频平台EasyGBS大批量通道接入后,创建角色接口未响应的排查
    国标GB28181协议视频平台EasyGBS是基于国标GB28181协议的视频云服务平台,支持多路设备同时接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级联等功能,在视频能力上,GB2818......
  • 接口相似数据结构复用率高?Apipost这招搞定!
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计......
  • FreePBX使用AMI接口给分机来电播放系统录音
    FreePBX使用AMI接口给分机来电播放系统录音这里可以预先制作好一段语音文件,将其上传到FreePBX系统录音中,通过AMI接口Playback给分机来电播放系统录音制作用于播放的语音文件准备好需要播放的语音文件,下面将准备的文本”欢迎您的来电,这是是xxx公司,这里能找到您需要的产品....“,我......
  • 个人微信开发API接口开发
    个人微信开发API接口可拓展功能说明1、个人微信多账号管理、聚合聊天、多个微信号同时登陆、多个微信号集中在一个窗口进行聊天,实现一人多号同时沟通快速提升沟通效率,提升微信营销效率。2、客服灵活分配:客服主管可自由分配微信号给指定客服,方便及时处理问题,也可随时转接给公司商务......
  • Python中实现远程调用(RPC、RMI)简单例子
    远程调用使得调用远程服务器的对象、方法的方式就和调用本地对象、方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了。远程调用是分布式系统的基础。远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI)。RPCRPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有......
  • 【安全学习之路】Day38
    ......
  • android调用javascript传多个参数
    Stringparam1="Hello";Stringparam2="World";Stringscript="yourJavaScriptFunction('"+param1+"','"+param2+"');";webView.loadUrl("javascript:"+"yourJava......