规则

接口需要四个公共参数

  • X-Nonce
  • X-Time
  • X-Token
  • X-Sign

这四个参数是需要在 Header 上发送

参数 说明 长度 必须
X-Nonce  随机字符串 16
X-Time 时间戳 10
X-Sign lower(sha1("{{固定常量}}:{{X-Nonce}}:{{X-Time}}:{{data}}”)) 40

能够防护的攻击方式

  • 参数修改 (对method,params 等进行 hash)
  • 重放攻击 (记录请求时间戳+随机值)

签名校验 data 算法

常用请求 METHOD,

GET

1
a=b&c=d&e=f

get 请求需要对参数进行排序然后

php 部分使用 ksort 进行排序

1
2
3
uri => /v1/user/{id}
http_build_str => a=b&c=d
data = upper(method)+uri+http_build_str(ksort(get_params))

POST

有两部分参数 1:url参数, 2:body参数

1
data = upper(method)+uri+http_build_str(ksort(get_params))+http_build_str(ksort(post_params))

PUT

1
data = upper(method)+uri+http_build_str(ksort(get_params))+http_build_str(ksort(post_params))

DELETE

1
data = upper(method)+uri+http_build_str(ksort(get_params))

写在最后

本方案只是解决了,api 接口容易被人利用