首页 文章

PHP将签名添加到POST请求

提问于
浏览
0

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

<?php
    if( isset($_POST["name"]) && crypt($_POST["name"],'saltgoeshere') == $_POST["hash"] )
    {
        echo "Name is ". $_POST['name']. "
"; 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是预处理器 .

制作AJAX请求会解决这个问题吗?

编辑:我正在尝试确保用户在提交数据时没有篡改数据 .

1 回答

  • 4

    我正在尝试确保用户在提交数据时没有篡改数据 .

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

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

    一些有意义的事情:

    • 您在 hidden 表单元素中向用户提供数据,并且您希望在服务器→客户端→服务器时检查用户是否未更改此值;在这种情况下,您可以使用哈希和秘密对其进行签名,只有服务器知道并以这种方式验证它 . 这里的关键是有's a secret component on the server that the client doesn'吨有,不能假 .

    • 在上面的场景中,您还可以简单地使用会话 . 在这种情况下,你虽然都朝着同一个方向努力 .

    • 您希望防止 third parties 篡改数据,而 third parties 必须验证数据是否正确;签字等等,在这里再次无关紧要 .

相关问题