php如何判断是来自什么地方的请求?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

php如何判断是来自什么地方的请求?

落地花开啦 2016-06-13 16:44:07 1388

比如A站点向B站点发起GET请求,我怎么判断这个请求是不是A站点来的?
目前我知道的有$_SERVER['HTTP_REFERER']
但是$_SERVER['HTTP_REFERER']是可以伪造的,请求更好的解决方法

PHP
分享到
取消 提交回答
全部回答(1)
  • 落地花开啦
    2019-07-17 19:36:24

    如果只有 B 站在自己的控制范围内 ... 那么没有更好的办法 ...
    HTTP_REFERER 是 HTTP 协议里面唯一用来标识用户来源的字段 ...
    不过如果 A 站也在你的控制范围内 ... 你可以做一个协议来确认这个请求真的来自 A 站 ...
    比如在每个 A 站给 B 站的请求上传递两个参数 ... 一个叫做 t 一个叫做 f ...
    如果你收到的 $_GET['f'] 等于 md5( $_GET['t'] . 'secret_key' ) 的话就视为合法 ...
    继续按照原来的逻辑处理这个请求 ... 否则直接将之丢弃掉 ...
    如果不想加入两个参数 ... 也可以用一些 A 站可以获取的内容来作为 t 参与计算 ...
    这是比较稳妥的两个站点之间标记身份的方法 ... 俗称指纹或者签名 ...
    上面描述的一次盐化散列算法是比较简单的 ...
    如果你需要安全性更高的传递 ... 也可以使用 RSA 一类更高强度的算法 ...
    另外还有一种方法,也需要 A 站在你的控制范围内,
    比如目标链接是 http://B.ext/somelink ,需要转换成 http://A.ext/go/somelink
    然后在 A 站的后台处理这样链接的时候给 B 站的某个限定来源 IP 的地址发一条消息 。
    消息内容就是用户的 IP 浏览器和欲访问的地址。
    然后 B 站如果紧跟着接到了这样的访问就视为是合法的,否则丢弃。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程