PHP-通过表单安全地发送各种用户操作的数据

PHP-通过表单安全地发送各种用户操作的数据,php,forms,security,post,encryption,Php,Forms,Security,Post,Encryption,假设我有一个表单,它根据用户在多状态流程中的当前状态更改其内容(字段和选项)。假设它总是导致相同的操作,这意味着该操作需要找出发生了什么事件以及发生在哪个实体上 <form action='/somecontroller/someaction' method='post'></form> 将这些敏感数据传输到控制器的最常见方式是什么?我甚至不愿意建议隐藏字段,因为任何人都可以更改这些字段。某种类型的双向加密,然后在操作中解密并用于确定其余的服务器端加密?也许可以序列

假设我有一个表单,它根据用户在多状态流程中的当前状态更改其内容(字段和选项)。假设它总是导致相同的操作,这意味着该操作需要找出发生了什么事件以及发生在哪个实体上

<form action='/somecontroller/someaction' method='post'></form>

将这些敏感数据传输到控制器的最常见方式是什么?我甚至不愿意建议隐藏字段,因为任何人都可以更改这些字段。某种类型的双向加密,然后在操作中解密并用于确定其余的服务器端加密?也许可以序列化敏感信息,对其进行加密,并将其放在表单客户端的单个隐藏字段中,然后在控制器中解密和取消序列化

<?php

$hiddenData = unserialize($this->decrypt($_POST['hiddenData'], SALT));
unset($_POST['hiddenData']);
$data = array_merge($hiddenData, $_POST);
...

有趣的问题。我要做的是结合以下内容(如果会话不是您的解决方案):

  • 在序列化表示上使用AES_256/修改的AES_256加密/解密
  • 对变量进行MD5+SALT(或类似)散列,您可以将其与存储的散列进行比较,以确定是否发生了任何操作
  • 使用类似于用户IP的内容作为SALT来生成散列或加密函数,因此如果用户的IP发生更改,您将知道这一点(注意:IP地址在某些情况下可能会更改)

  • 您根本不会将该数据发送给客户机


    将其存储在会话管理功能的服务器端(对于PHP,您可以使用$_session变量访问它),并且只将会话令牌(长随机数,PHP也有生成/维护良好会话标识符的例程)发送到客户端(通常以cookie的形式完成)。为了在多步骤过程(包括用户所处的状态)中跟踪数据,您永远不希望将其公开给客户端。

    您可以通过服务器端会话存储(例如,
    $\u session
    )来实现这一点。唯一可以公开共享的是会话标识符(
    session\u id()
    ),但该会话存储中的所有数据都保存在服务器端。如果用户同时处于两种不同的状态,这不会让用户用额外的无用信息污染会话信息吗(因此能够分别执行两个事件,可能是在两个不同的视图中?)我喜欢这个选项,会话可能会很麻烦(请参阅对其他答案的评论),我不喜欢检查对象的每一个post参数和每一个打开状态,以确定在某个状态下触发哪个事件。我将试一试,看看结果如何,银行就是这样做的,对不对?在提交后对信息进行散列,并在服务器端对其进行比较和解密…他们主要在fir中使用SSL第一次运行,除此之外的所有内容都强烈依赖于银行和国家……然而,AES256是国家安全局(NSA)批准用于绝密信息的密码,因此它应该足够安全,可供您使用:)我同意了这一点,如果我遇到它们,将以更好的结果报告。我当然也会尝试sessions解决方案,但我最喜欢它,因为它可以让我的实体拥有多个具有相同参数的状态,而不会在提交后立即触发两个相同的状态。也许我对另一个问题的回答也会让你感兴趣,请看一看。。。