您好,匿名用户
随意问技术百科期待您的加入

php怎么判断是来自什么地方的请求

0 投票

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

用户头像 提问 2014年 6月7日 @ Talon 上等兵 (294 威望)
分享到:

1个回答

0 投票
 
最佳答案

如果只有 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 站如果紧跟着接到了这样的访问就视为是合法的 ... 否则丢弃 ...

恩恩基本就是这样啦 ...

用户头像 回复 2014年 6月7日 @ Diana 上等兵 (326 威望)
选中 2013年 9月7日 @Talon
提一个问题:

相关问题

0 投票
1 回复 31 阅读
0 投票
1 回复 31 阅读
用户头像 提问 2014年 2月3日 @ Archer 上等兵 (494 威望)
0 投票
1 回复 26 阅读
用户头像 提问 2013年 12月29日 @ Nunu 上等兵 (350 威望)
+1 投票
1 回复 106 阅读
0 投票
1 回复 31 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...