You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中过滤访问流量的最佳方法?仅允许自有安卓应用发起请求

限制PHP接口仅允许自有Android App访问的实现方案

要完全100%拦截所有伪造请求在技术上无法实现,但以下多层叠加的方案可以拦截几乎所有Postman等工具的普通请求、第三方恶意调用,满足绝大多数场景的安全需求:

0. 基础前置要求

所有APP和服务端的交互必须走HTTPS协议,避免请求明文传输被抓包窃取参数、签名规则。

1. 核心签名校验层(最关键防护)

  • 前后端提前约定唯一不对外公开的App Secret密钥,该密钥仅存储在Android App打包代码和服务端PHP环境中,禁止通过任何方式对外传输
  • Android端发起请求时按固定规则生成签名:将所有请求参数(GET+POST参数)按字典序排序后拼接为字符串,末尾拼接上App Secret,使用sha256或者md5算法计算哈希值,将该哈希值作为sign参数和其他参数一起传给服务端
  • 服务端PHP收到请求后,用完全相同的规则对收到的所有参数做拼接、哈希计算,将计算结果和请求携带的sign对比,不一致直接返回403状态码拒绝访问

注意:禁止将App Secret放到请求参数中传输,仅用于两端本地计算签名

2. 时效性校验层(防重放攻击)

  • Android端发起请求时额外携带当前10位/13位时间戳作为timestamp参数,该参数和其他参数一起参与签名计算
  • 服务端收到请求后首先校验时间戳和服务端当前时间的差值,差值超过5分钟的请求直接拒绝,再进行后续的签名校验
    该规则可以避免攻击者抓包拿到历史有效请求后,重复提交调用接口。

3. 自定义请求头校验层(拦截普通工具请求)

  • Android端发起HTTP请求时,添加自定义的私有请求头,例如X-APP-VALID: 你自定义的唯一随机字符串,该头字段的值也可以参与签名计算
  • 服务端首先校验请求是否携带该自定义头、头的值是否符合预期,不符合直接拒绝
    不要依赖User-Agent字段做校验,该字段可以被任意篡改,防护有效性极低

4. 客户端加固层(防止密钥泄露)

  • 不要将App Secret明文写在Android的Java/Kotlin业务代码中,建议将密钥存储、签名计算逻辑用NDK写到so动态库中,打包后反编译很难提取到明文密钥
  • 开启Android代码混淆,增加反编译难度

5. 可选场景方案(仅适用特定场景)

如果你的APP仅在企业内部固定网络环境下使用,可以直接在服务端的Nginx/Apache配置中添加IP白名单,仅允许指定IP段的请求访问PHP接口,该方案安全性最高,但不适用于公网用户使用的普通APP。

内容的提问来源于stack exchange,提问作者Rafael Diaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:54:03