Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中验证HTTP post发送器_Php_Html - Fatal编程技术网

在php中验证HTTP post发送器

在php中验证HTTP post发送器,php,html,Php,Html,我寻求一种方法来验证一组post变量的发送者是否是我认可的发送者 我在服务器a上托管了一个简单的HTML表单。该表单的操作指向服务器B,我在那里处理数据。我想要的是一种方法来确保数据实际上是从服务器a而不是随机的服务器C发送的。有没有一种方便的方法来做到这一点 我看过一些不同的方法,但我觉得没有一种是好的: HTTP\u REFERER在$\u服务器中。根据法律,这是不可信的 保留会话变量(将会话ID从 并将它们附加到查询字符串中)。这感觉不对 将添加到表单并在接收端检查该密钥。这将只需要在

我寻求一种方法来验证一组post变量的发送者是否是我认可的发送者

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

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

  • HTTP\u REFERER
    $\u服务器中
    。根据法律,这是不可信的

  • 保留会话变量(将会话ID从 并将它们附加到查询字符串中)。这感觉不对

  • 添加到表单并在接收端检查该密钥。这将只需要在html源代码中的一个视图来获取“secretkey”


    • 简短回答:您的表单,我们称之为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

      这个想法与我们的想法相似

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

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

      B可以通过执行与创建原始的
      $str

      相同的步骤来验证表单X的签名。请参见真棒,这正是我要找的@daker-本质上,这只是“在表单中添加一个”…它只是每个用户唯一的,还需要保留会话变量(因为您需要将POST数据中的令牌与会话数据中分配给用户的令牌进行比较)。小心。csrf预防侧重于防止不情愿的客户意外伪造请求。如果你不信任用户,那么在不涉及他们的浏览器的情况下传输数据(即服务器到服务器)。
      $signature = hash_hmac("sha1", $str, $key);