由于接口是基于HTTP的,也就是完全开放的,设计的接口是否安全,会不会被恶意调用或变为攻击入口,是接口首先要解决的问题。那么直入主题,我是这么设计的。
1、防止数据串改。(通过为接口增加以下3个参数项,验证数据的完整性)
1)_key : 这个参数不带入接口,作为调用者和服务端内部商定好的秘钥保存,不得外泄。用于计算签名token值时使用。
2)random_str:随机字符串,保证每次调用接口时要唯一性。
3)token:接口调用签名值。
token参数值的算法是使用接口参数值以字符串形式,按一个固定顺序连接起来,拼接上_key值,再进行MD5加密后所得。当服务端响应时,也按照这个算法来计算token值,然后进行对比,若一致则认为调用者的参数没有变串改。原理是,攻击者不知道_key的值,所以一旦伪造参数,token的值必然失效。
2、防止重复提交。
以上的random_str参数能有效的防止相同token值的请求出现,所以在每次请求响应时,持久化保存token值,然后进行排重查询即可。