zoukankan      html  css  js  c++  java
  • 【求解释】关于第三方接口调用中安全的疑问

    首先声明,我对什么加密解密,公钥私钥啊就是一小白。在看支付宝接口的时候,突然心生一疑问:与接口通讯中如何保证不被窃取和篡改?不懂~求解释。

    下面是一个典型的支付宝接口方式。

    1.  去支付宝申请接口权限,然后他会给你一个“partnerId” 和一个 “privateKey”。
    2. 然后请求某个接口的时候应该是这样的:  serviceURI+msg&partnerId=partnerId&sing=MD5(msg+partnerId+privateKey);就是说你的报文和partnerId是明文的,然后用你要发送的报文+你的partnerId+你的privateKey做MD5运算,产生签名。同时把签名发给支付宝。
    3. 支付宝接到请求后,从明文拿到你的partnerId,再从他库里检索到你的privateKey。同样对报文+你的partnerId+你的privateKey做MD5运算,如果算出得签名和你发给他的签名没有问题,认为消息是没有篡改过的。

      那,我的问题是。如果我是黑客,我也去支付宝申请了一对我的“partnerId” 和 “privateKey”。然后,我拦截了你发送给支付宝的请求,截下来之后,我对请求做了篡改,再把其中的partnerId替换成我的。并用我的partnerId和privateKey重新做签名。最后再把篡改后的请求发送给支付宝。支付宝接收到的时候由于partnerId是我的了。我也是用的我的partnerId和privateKey做签名。所以他的签名验证应该是可以通过的。也就说,他会认为这个请求没有问题!但事实上这个请求是被我篡改了的! 这是怎么回事呢?

      有同学说,因为使用了HTTPs 所以不用担心请求被拦截的问题。可惜我对HTTPs同样不了解。如果HTTPs足够可靠的话。那还要什么privateKey,还要签名干什么?直接请求就行了啊。不懂。希望大家能给我解释一下,越详细越好。给我科普科普。

      PS:我这只是拿支付宝举例子,貌似大部分第三方接口调用都是这个模式~

  • 相关阅读:
    toString()和toLocaleString()有什么区别
    解决浏览器跨域问题
    JavaScript排序,不只是冒泡
    input disabled的情况下在IOS设备中怎么修改颜色
    jquery api 中文文档
    javascript中var that=this的意思
    JS中(function(){xxx})(); 这种写法的意思
    http-equiv 的使用
    $(function(){......})的意思
    js中(function(){…})()立即执行函数写法理解
  • 原文地址:https://www.cnblogs.com/coffee/p/2308464.html
Copyright © 2011-2022 走看看