PHP将签名添加到POST请求

Bij*_*jan 0 php hash

我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)

用户提交其名称,脚本根据其输入创建哈希,并使用名称和哈希创建POST请求。然后,脚本查看发布请求,并检查提交的哈希是否与实际哈希匹配。

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

发出AJAX请求是否可以解决此问题?

编辑:我正在尝试确保用户在提交数据时未夯实数据。

dec*_*eze 5

我正在尝试确保用户在提交数据时未对其进行篡改。

直言不讳:这是一个非常愚蠢的原因。用户正在将数据输入表单并将其提交给您。他们已经在“篡改”数据。想要以任何方式对数据进行签名没有任何意义。即使PHP的“问题”成为“预处理器”不存在,这将如何工作?PHP会接受用户输入的数据,对其进行签名,然后将其提交给自己并检查签名吗?您可以跳过整个过程,而只需接受用户的输入,结果将是相同的。

您可以使用Javascript进行签名,但这同样是胡说八道。您正在提供可以向客户端生成有效签名的Javascript代码...是什么阻止了任何人“篡改”数据,然后为其生成有效签名?

东西意义:

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