gpt4 book ai didi

php - 在 php 中验证 HTTP post 发件人

转载 作者:可可西里 更新时间:2023-10-31 22:55:45 24 4
gpt4 key购买 nike

我寻求一种方法来验证一组帖子变量的发件人是否是我认可的。

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

我看过一些不同的方法,但我觉得没有一个是好的:

  • HTTP_REFERER$_SERVER .根据,这真的不能被信任 php.net .

  • 保存 session 变量(让 session ID 从 A 传输过来到 B 并将它们附加到查询字符串)。这感觉不对。

  • 添加 <input type="hidden" name="secretkey" />到表格并在接收端检查该 key 。这将只需要查看 html 源代码即可获取“ key ”。

最佳答案

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

如果您不回发给 A,那么 B 如何知道请求来自 A? A 不知道客户端(我们称之为 Zed)发送了什么? A 只将表格 X 发送给 Zed,否则不再参与对话。

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去做这个。对于 key ,您需要生成一些随机字符串和数字。 A 和 B 都应该知道这个值,你应该保持它的私密性。然后您可以生成签名以添加到您对 B 的请求中。

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

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

关于php - 在 php 中验证 HTTP post 发件人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com