加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在php中验证HTTP post发件人

发布时间:2020-12-13 17:25:08 所属栏目:PHP教程 来源:网络整理
导读:我寻求一种方法来验证一组post变量的发送者是我赞成的. 我在服务器A上托管了一个简单的HTML表单.此表单的操作指向服务器B,我在那里处理数据.我想要的是一种方法来确保数据实际上是从服务器A而不是一些随机服务器C发送的.有没有一种方便的方法来做到这一点?
我寻求一种方法来验证一组post变量的发送者是我赞成的.

我在服务器A上托管了一个简单的HTML表单.此表单的操作指向服务器B,我在那里处理数据.我想要的是一种方法来确保数据实际上是从服务器A而不是一些随机服务器C发送的.有没有一种方便的方法来做到这一点?

我看过一些不同的方法,没有一种我觉得很好:

> $_SERVER中的HTTP_REFERER.这根本不可信
php.net.
>保留会话变量(让会话ID从A转移
到B并将它们附加到查询字符串).这感觉不对.
>添加< input type =“hidden”name =“secretkey”/>到表格并检查接收端的那把钥匙.这只需要在html源处的视图来获取“密钥”.

解决方法

简答:您的表单,我们称之为X,需要回发给A.然后可以签署请求然后将所有这些转发到B.

如果你不回帖给A,那么B怎么知道请求来自A? A不知道我们称之为Zed的客户会发送什么?仅向Xed发送表单X,否则不再参与对话.

Zed,可以在X中发布他们想要回到A的任何内容.Zed可能是恶意的,或者Zed可能是CSRF的受害者.但是,您的问题只是B知道请求来自A. A可以验证输入并采取适当的操作.如果A选择接受输入表格X并签署请求并发送给B,则B将知道该请求来自A.

这个想法与OAuth 1.0a的相似.

获取X中的所有表单变量,并创建一个URL编码的字符串,其中的键按字母数字排序排序.

$str = "keyA=<val1>&keyB=<val2>&keyB123=<val3>";

然后散列并签名. HMAC-SHA1 is once such algorithm这样做.对于密钥,您需要生成一些随机字符和数字字符串. A和B都应该知道这个值,你应该保持非常私密.然后,您可以生成签名以添加到您对B的请求中.

$signature = hash_hmac("sha1",$str,$key);

B可以通过执行与创建原始$str相同的步骤来验证表单X的签名.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读