app接口,如何保证是由app内部调用而非外部模拟post请求调用。
在爬虫快手主播信息的时候,发现只要我改动一下参数,比如第一页 page=1的时候,需要爬下一页,把page改为2发现提示sign验证失败了
也就是说,快手在开发的时候考虑了有人抓包到接口后,通过修改参数的方式继续获取下一页(或者是其他操作,总结就是防止用户截断请求修改数据包后提交的做法)
我估计做法大概是在调用接口前,先对所有参数进行一个md5,当用户改一下值后,md5 出来的值就不对了
然后具体它md5了哪些值,没法得知,所以,尼玛靠接口采集有点悬。。。。
但是后来发现,每次我发送同一个参数过去,快手都给我返回了不同的主播列表,这就有点尴尬了。。。。
反正我是想得到主播列表,不管你给我返回什么列表,只要信息对就可以了。。。。然后就继续采了。。。。。。
谁知道他sign是怎么计算的啊
对apk的反编译不熟悉,有知道的告知一下。
由此想到之前自己开发的app,一直在苦于怎么样保证app的接口不被抓包后直接访问。
我当时的做法是,每次请求,对于重要接口,都加了一个参数叫做 timestamp,然后自己写了一个方法对这个字符串进行加密,然后一同传过来。
对于超过5分钟的timestamp,直接丢弃,用过之后将timestamp保存到数据库,当收到一个请求后,先查询该timestamp是否已经被使用,如果是,则返回错误。正确的情况下才继续执行相关逻辑。
这种设计,比起快手app那样加sign的验证,实现更为复杂,并且数据数据持久支持(例如数据库)。因为这个timestamp是否可用,基于数据库中是否存在。
所以,以后在写接口的时候,可以仿造这种写法。
app接口,如何保证是由app内部调用而非外部模拟post请求调用。的更多相关文章
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [6] 版本升级接口开发
判定 app 是否需要加密:通过 app 表中的 status 字段来判定,加密的字符串为 app 表中的 key 字段. 在获取的客户端和服务器端(数据库表中相应字段)的版本号不一致时,返回 dat ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [5] 版本设计分析及数据表设计
APP 版本升级以及 APP 演示 ① 版本升级分析以及数据表设计 ② 版本升级接口开发以及 APP 演示 /** * version_upgrade 版本升级信息表 */ CREATE TABLE ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [7] APP 错误日志接口
APP 上线以后可能遇到的问题: ① APP 强退 ② 数据加载失败 ③ APP 潜在问题 错误日志需要记录的内容 数据表 error_log 字段: id app_id:app 类别 id did: ...
- App接口如何保证安全
微信开发或者高德地图,百度地图什么的api要使用,使用之前都需要注册一个账号,然后系统会给你一个key,然后调用api的时候把key传给服务器. 平常公司内部开发项目时,直接用mvc为app客户端提供 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式
以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTim ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式
用于 linux 执行 crontab 命令生成缓存的文件 crop.php <?php //让crontab 定时执行的脚本程序 require_once 'db.php'; require_ ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式
方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [1] 单例模式连接数据库
单例模式 单例模式三大原则: ① 构造函数需要标记为非 public (防止外部使用 new 操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化: ② 拥有一个保存类的实例的静态成员变量 ...
- Java模拟http请求调用远程接口工具类
package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...
随机推荐
- 编写高质量代码改善C#程序的157个建议——建议85:Task中的异常处理
建议85:Task中的异常处理 在任何时候,异常处理都是非常重要的一个环节.多线程与并行编程中尤其是这样.如果不处理这些后台任务中的异常,应用程序将会莫名其妙的退出.处理那些不是主线程(如果是窗体程序 ...
- Alpha冲刺(八)
Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...
- Java集合框架(Collection Framework)学习之 HashMap
从API文档可以得到HashMap的以下几个特点: 基于哈希表(hash table)实现,并且是链式哈希表 允许空值和空键(null=null 键值对) HashMap与Hashtable基本相同, ...
- webapi发布常见错误及解决方案
webapi发布常见错误及解决方案 错误一: 错误:404 (Not Found) 解决方案: 在 <system.webServer>节点中添加如下模块: <modules ru ...
- 一行代码搞定Dubbo接口调用
本文来自网易云社区 作者:吕彦峰 在工作中我们经常遇到关于接口测试的问题,无论是对于QA同学还是开发同学都会有远程接口调用的需求.针对这种问题我研发了一个工具包,专门用于远程Dubbo调用,下面就让我 ...
- 691. Stickers to Spell Word
We are given N different types of stickers. Each sticker has a lowercase English word on it. You wou ...
- linux kvm虚拟机安装
1.上传ISO文件,这里采用OEL5.8x64iso 2.开始安装OEL5.8 (1)raw格式磁盘 virt- --vcpus= --disk path=/data/test02.img,size= ...
- “全栈2019”Java第六十四章:接口与静态方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 模拟RHCSA考试环境
转载自 http://blog.51cto.com/10681635/2084794 模拟RHCSA考试环境 第1章 修改 root 密码 第2章 配置网络 第3章 设定SeLinux 第4章 ...
- [agc016b]Colorful Hats 分类讨论
Description 有n个人,每个人都戴着一顶帽子.当然,帽子有不同的颜色. 现在,每个人都告诉你,他看到的所有其他人的帽子共有多少种颜色,请问你有没有符合所有人的描述的情况. Input ...