前后端交互如何保证安全性?( 二 )

  • 然后做参数名和值的拼接,最后得到methodcancelp1v1p2v2pnvn 。
  • 在上面拼接得到的字符串前面加上验证密钥key,假设是abc,得到新的字符串abcmethodcancelp1v1p2v2pnvn 。
  • 将上面得到的字符串进行md5计算,假设得到的是abcdef,然后转为大写,得到ABCDEF这个值即为sign签名值 。最终产生的url应该如下:/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn&sign=ABCDEF
  • 注意:计算md5之前请确保请求发送方和接收方使用的字符串编码一致,比如统一使用utf-8编码,如果编码方式不一致则计算出来的签名会校验失败 。
  • 验签过程
    其实就是将请求url按照上述的规则进行同样的操作,计算得到参数的签名值,然后和参数中传递的sign值进行对比,如果一致则校验通过,否则校验不通过 。
    对请求和响应进行加解密
    可能有人会问,都使用了https了,为什么还要对请求和响应再做一次加解密,因为有些第三方抓包工具,例如Charles 通过某些手段是可以抓取https的明文的,因此对一些敏感数据,我们需要进行加密处理,常见的加解密方式有AES 对成加密方式和RSA非对成方式,至于如何运用,可以参考https的原理,有点复杂,不过可以简单分成如下几步:
    前后端交互如何保证安全性?

    文章插图

    前后端交互如何保证安全性?

    文章插图
     
     
    1.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人 。
    2.服务器将自己的公钥发送给客户端 。
    3.客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续 。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明 。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分 。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束 。
    4.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器 。
    5.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文 。
    6.然后服务器将加密后的密文发送给客户端 。
    7.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据 。
    总结
    前后端的交互如果做到以上使用https,对请求加解密以及对请求参数进行验签,基本上能解决大部分问题,但除此之外我们还应该做到对每个接口进行身份校验,确保该接口只能由特定的用户访问,或者该笔数据只能由特定的用户去进行修改 。




    推荐阅读