BAT HTTP接口安全规范调查

作者: 梦孤 | 来源:发表于2017-03-05 11:07 被阅读0次

    今天在看书的时候,看到一句话觉得很有道理:“尽量通过读取协议头来获取有用的信息”,就萌生了一个想法,BAT公司提供的服务接口,有哪些信息是放到头部的?

    百度

    • OCR接口:appkey放header里面,没有参数校验码;
    • 百度钱包支付接口:商户号、编码字符集、加密算法、接口版本、sign都放post中;
      没有使用的参数不参与加密,且不需要传;

    阿里

    • 支付宝接口:商户号、编码字符集、加密算法、sign都放post中;
      没有值的参数无需传递,也无需包含到待签名数据中;
    • MNS通知接口:消息ID放header中,md5加密校验码在post里面;
      支持json和xml两种格式;

    微信

    • 微信支付接口:公众号ID、商户号、sign都放post中;
      编码只支持UTF-8;xml格式;

    总结

    • 签名(sign)规则基本都一样,对这个有兴趣的可以参考后面的附录;
    • 商户号、签名都是放到post消息体中;
    • 基本上没有往header里面放数据的

    附录-签名规则(微信为例)

    a.对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的
    格式(即 key1=value1&key2=value2…)拼接成字符串 string1,注意:值为空的参数丌参不
    签名;
    b.在 string1 最后拼接上 key=Key(商户支付密钥)得到 stringSignTemp 字符串,幵对
    stringSignTemp 进行 md5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值
    signValue。

    假设以下为 package 传入参数:

    appid=wxd930ea5d5a258f4f
    auth_code=123456
    body=test
    device_info=123
    mch_id=1900000109
    nonce_str=960f228109051b9969f76c82bde183ac
    out_trade_no=1400755861
    spbill_create_ip=127.0.0.1
    total_fee=1
    key=8934e7d15453e97507ef794cf7b0519d
    

    i:经过 a 过程 URL 键值对字典序排序后的字符串 string1 为:

    appid=wxd930ea5d5a258f4f&auth_code=123456&body=test&device_info=123&mch_id=1900000109&nonce_str=960f228109051b9969f76c82bde183ac&out_trade_no=1400755861&spbill_create_ip=127.0.0.1&total_fee=1
    

    ii:经过 b 过程后得到 sign 为:

    sign
    =md5(string1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase
    =md5(appid=wxd930ea5d5a258f4f&auth_code=123456&body=test&device_info=123&mch_id=1900000109&nonce_str=960f228109051b9969f76c82bde183ac&out_trade_no=1400755861&spbill_create_ip=127.0.0.1&total_fee=1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase()
    ="c380bec2bfd727a4b6845133519f3ad6".toUpperCase()
    ="C380BEC2BFD727A4B6845133519F3AD6"
    

    相关文章

      网友评论

        本文标题:BAT HTTP接口安全规范调查

        本文链接:https://www.haomeiwen.com/subject/vxpsgttx.html