PHP向POST请求添加签名


PHP Add Signature to POST Request

我正在尝试用PHP发出POST请求。我正在尝试提交一个用户名和一个生成的哈希。以下是我目前拥有的代码:

<?php
    if( isset($_POST["name"]) && crypt($_POST["name"],'saltgoeshere') == $_POST["hash"] )
    {
        echo "Name is ". $_POST['name']. "<br />";
        exit();
    }
    else if( isset($_POST["name"]) && crypt($_POST["name"],'saltgoeshere') != $_POST["hash"] ) {echo "Invalid/Tampered Request?"; exit();}
?>
<html>
<body>
  <form action="<?php $_PHP_SELF ?>" method="POST">
  Name: <input type="text" name="name" value="" />
  Password: <input type="hidden" name="hash" value="<?php echo crypt($name,"saltgoeshere");?>" />
  <input type="submit" />
  </form>
</body>
</html>

用户提交他们的名称,脚本根据他们的输入创建一个散列,并使用名称和散列创建POST请求。然后,脚本查看post请求,并检查提交的哈希是否与实际哈希匹配。

我目前遇到的问题是根据用户输入生成哈希,因为PHP是Pre处理器。

发出AJAX请求会解决这个问题吗?

编辑:我正在努力确保用户在提交数据时没有篡改数据。

我正在努力确保用户在提交数据时没有篡改数据。

坦率地说:这是一个非常愚蠢的理由。用户正在将数据输入到表单中并将其提交给您。他们已经在"篡改"数据。想要以任何方式对此数据进行签名都没有任何意义。即使PHP作为"预处理器"的"问题"不存在,这将如何工作?PHP会接受用户输入的数据,对其进行签名,然后将其提交给自己并检查签名?您可以跳过整个过程,只接受用户的输入,这将产生相同的结果。

您可以用Javascript进行签名,但这同样是无稽之谈。您提供的Javascript代码可以为客户端生成有效的签名。。。是什么阻止任何人"篡改"数据,然后为其生成有效签名?

有意义的东西:

  • 您在hidden表单元素中向用户提供数据,并且您希望检查用户在访问服务器时是否没有更改此值→客户→服务器在这种情况下,您可以使用哈希和机密对其进行签名,只有服务器知道并通过这种方式进行验证。这里的关键是服务器上有一个秘密组件,客户端没有,也不能伪造
  • 在上面的场景中,您也可以简单地使用会话。在这种情况下,您将数据防篡改存储在服务器本身上,而客户端根本无法访问该服务器。上述签名方法的优点是,它使服务器保持无状态,而对于会话,服务器必须存储状态。不过,他们都在朝着同一个目标努力
  • 您希望防止第三方在数据从客户端传输给您时篡改数据。解决这一问题的唯一现实方法是使用SSL/TLS安全连接。这允许客户端和服务器之间合理安全的通信,不会被第三方篡改。客户端仍然可以在任何时候向您发送任何数据,您必须验证这些数据的正确性;再次强调,签字或诸如此类的事情与此无关