前面的文章说了接口数据如何获取,今天就来聊聊接口数据的安全问题。说到接口加密验证,通常都称作“签名”,类似于名人的个性签名,让其它人无法模仿。比如说请求接口删除自己写的文章,又或者请求接口查询自己的帐单明细。被抓到接口地址,然后随便改动下参数,岂不是就能随意删除别人的文章或者得到别人的帐单明细了。通常接口签名,就是在接口请求时加上一条签名参数,来让后台识别“身份“。
1.0 最简单的, 直接带上密钥
一些接口资源网站,对于免费用户就提供了这种签名方式。要求每次请求数据时带上预先提供的密钥。比如 www.testapi.com/date/list/json,在请求时参数里加上 sign=iamlilei。这种方式是相当LOW的,防御力相当于0。提供接口的人根本就没打算安全验证,加上签名只是为了方便统计接口使用次数以方便计费。
2.0 升级版, 隐藏id,改用token
最开始说了,如果是删除内容的接口,参数中就肯定有文章编号,用户身份的标识。如果使用id这种数字形式的参数,很容易被冒用。但是如果给用户创造一个复杂的名字,比如’asdfWEkKjH788J’这种字母加数字加大小写加特殊字符的形式,相信没人猜得出规律了。即使被人抓到接口地址,他也改不了其它用户的数据。但是有些资源类的接口,比如获取最新新闻,最新天气等,这类接口就不存在身份了,怎么防止别人免费使用你的接口呢!
3.0 定时更新token
用户身份是固定的,但token是可以经常更新,签名是和用户身份绑定的,请求时也要带上。这样别人无法掌握你最新的密钥,自然也无法使用了。目前,这种签名是最普遍的,比如微信公众号各种认证都是用的这种方式。
4.0 加密签名
通常我们做到第三步,效率高,安全度也可以。但是,非要找一个不会被冒用接口的方法。肯定也是有的,就是加密签名。首先,服务端提供给客服端一串密钥,类似token.请求接口时,我们不发送token,而是先把token与当前时间戳拼接并使用md5等固定的算法加密成sign参数,然后把时间戳与sign添加到请求参数里。这样服务收到请求后,同样把用户对应的token和时间戳拼接再加密,最后做判断是否一致。当然,时间戳肯定是有时效的,可以设置成3秒。使用这样的方式,不透露密钥,不透露加密算法,是很难被冒用的。
总结
学术的东西,没有最好,只有更好。具体使用哪种方式还需要针对具体的场景。如果只是在后端使用可以使用最简单的方式。但是涉及到用户数据,那就要防范了。