我正在尝试使用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请求会解决此问题吗?
编辑:我正在努力确保用户在提交数据时没有篡改数据。
答案 0 :(得分:4)
我正在尝试确保用户在提交数据时没有篡改数据。
非常生硬:这是一个非常愚蠢的原因。用户将数据输入表单并提交给您。他们已经在“篡改”数据。想要以任何方式签署此数据没有任何意义。即使PHP作为“预处理器”的“问题”不存在,它将如何工作? PHP会接受用户输入的数据,签名,然后将其提交给自己并检查签名?您可以跳过整个过程,只需获取用户的输入,即具有相同的结果。
你可以在Javascript中进行签名,但这同样是胡说八道。您正在提供可以为客户端生成有效签名的Javascript代码...什么阻止任何人“篡改”数据然后为其生成有效签名?
会有意义的东西:
hidden
表单元素中向用户提供数据,并且您希望在服务器→客户端→服务器时检查用户是否未更改此值;在这种情况下,您可以使用哈希和秘密对其进行签名,只有服务器知道并以这种方式验证它。这里的关键是服务器上有一个秘密组件,客户端没有,也不能伪造。