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

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

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

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

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

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

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

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

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

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

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

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

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

app接口,如何保证是由app内部调用而非外部模拟post请求调用。的更多相关文章

  1. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [6] 版本升级接口开发

    判定 app 是否需要加密:通过 app 表中的 status 字段来判定,加密的字符串为 app 表中的 key 字段. 在获取的客户端和服务器端(数据库表中相应字段)的版本号不一致时,返回 dat ...

  2. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [5] 版本设计分析及数据表设计

    APP 版本升级以及 APP 演示 ① 版本升级分析以及数据表设计 ② 版本升级接口开发以及 APP 演示 /** * version_upgrade 版本升级信息表 */ CREATE TABLE ...

  3. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [7] APP 错误日志接口

    APP 上线以后可能遇到的问题: ① APP 强退 ② 数据加载失败 ③ APP 潜在问题 错误日志需要记录的内容 数据表 error_log 字段: id app_id:app 类别 id did: ...

  4. App接口如何保证安全

    微信开发或者高德地图,百度地图什么的api要使用,使用之前都需要注册一个账号,然后系统会给你一个key,然后调用api的时候把key传给服务器. 平常公司内部开发项目时,直接用mvc为app客户端提供 ...

  5. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式

    以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTim ...

  6. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式

    用于 linux 执行 crontab 命令生成缓存的文件 crop.php <?php //让crontab 定时执行的脚本程序 require_once 'db.php'; require_ ...

  7. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式

    方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...

  8. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [1] 单例模式连接数据库

    单例模式 单例模式三大原则: ① 构造函数需要标记为非 public (防止外部使用 new 操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化: ② 拥有一个保存类的实例的静态成员变量 ...

  9. Java模拟http请求调用远程接口工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

随机推荐

  1. mybatis 存储过程调用

    接口 UserInfoMapper.java xml   UserInfoMapper.xml 如何关联 <?xml version="1.0" encoding=" ...

  2. 【转载】python计算文件的行数和读取某一行内容的实现方法

    一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...

  3. hadoop大致问题

    一.项目编码实现 HDFS文件上传 HDFS文件下载 定位文件读取 通过API操作HDFS 通过IO流操作HDFS HDFS写数据流程 HDFS读数据流程 统计一堆文件中单词出现的个数(WordCou ...

  4. delphi中sql实现while循环插入,不存在则插入

    ' declare @i int; '+ ' set @i=0; '+ ' while @i<4 '+ ' begin '+ ' insert into NBCommission(Type,It ...

  5. MVC4 路由解析 同名Controller的解决方案

    通常我们在MVC中通过Area建立子站的时候会有 controller名称重复的情况,这是后如何区分路由优先级, 我们知道 在Route对象中存在RouteValueDictionary 类型的Dat ...

  6. Data Base oracle常见错误及解决方案

    Data Base oracle常见错误及解决方案 一.TNS协议适配器错误: 原因: 此问题的原因都是由于监听没有配置好. 解决: 1.打开oracle工具Net Manager,删除服务及监听,重 ...

  7. GEEK UNINSTALLER

    geek.exe https://geekuninstaller.com/download Event log message indicates that the Windows Installer ...

  8. WebGL 一

    WebGL绘制窗口 <html><head><title>OpenGL Test</title> </head><body>&l ...

  9. [51nod] 1090 3个数和为0 暴力+二分

    给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...

  10. jQuery动态数字翻滚计数到指定数字的文字特效代码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...