app接口,如何保证是由app内部调用而非外部模拟post请求调用。

在爬虫快手主播信息的时候,发现只要我改动一下参数,比如第一页 page=1的时候,需要爬下一页,把page改为2发现提示sign验证失败了

也就是说,快手在开发的时候考虑了有人抓包到接口后,通过修改参数的方式继续获取下一页(或者是其他操作,总结就是防止用户截断请求修改数据包后提交的做法)

我估计做法大概是在调用接口前,先对所有参数进行一个md5,当用户改一下值后,md5 出来的值就不对了

然后具体它md5了哪些值,没法得知,所以,尼玛靠接口采集有点悬。。。。

但是后来发现,每次我发送同一个参数过去,快手都给我返回了不同的主播列表,这就有点尴尬了。。。。

反正我是想得到主播列表,不管你给我返回什么列表,只要信息对就可以了。。。。然后就继续采了。。。。。。

谁知道他sign是怎么计算的啊

对apk的反编译不熟悉,有知道的告知一下。

由此想到之前自己开发的app,一直在苦于怎么样保证app的接口不被抓包后直接访问。

我当时的做法是,每次请求,对于重要接口,都加了一个参数叫做 timestamp,然后自己写了一个方法对这个字符串进行加密,然后一同传过来。

对于超过5分钟的timestamp,直接丢弃,用过之后将timestamp保存到数据库,当收到一个请求后,先查询该timestamp是否已经被使用,如果是,则返回错误。正确的情况下才继续执行相关逻辑。

这种设计,比起快手app那样加sign的验证,实现更为复杂,并且数据数据持久支持(例如数据库)。因为这个timestamp是否可用,基于数据库中是否存在。

所以,以后在写接口的时候,可以仿造这种写法。

 

posted @ 2017-07-31 00:05  LoveCoder  阅读(3902)  评论(0编辑  收藏  举报