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

<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作为盐来生成散列或用于crypt函数,因此如果用户的IP应该更改,您就会知道(注意:IP地址在某些情况下可能会更改)

07-24 18:30