Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何';加密';在PHP中重定向时在URL中传递的信息?_Php_Security_Url_Encryption - Fatal编程技术网

如何';加密';在PHP中重定向时在URL中传递的信息?

如何';加密';在PHP中重定向时在URL中传递的信息?,php,security,url,encryption,Php,Security,Url,Encryption,抱歉,如果标题不清楚,我想不出更好的,因为我对这个领域还是新手。:) 无论如何,我的问题是:我想用这个(不知道正式名称,抱歉)将一些信息从一个页面(我们称它为1.php)发送到另一个页面(我们称它为2.php): 正如你所看到的,这些信息是纯文本的,这是我不喜欢的。有没有一种简单的方法可以在1.php中对上面问号后面的字符串进行加密,然后让2.php(获取传递的信息)对其进行解密?我希望它是一个伴随的东西: 对不起,如果这是一个愚蠢的问题。非常感谢 如果不希望修改信息,请使用哈希字符串来验证

抱歉,如果标题不清楚,我想不出更好的,因为我对这个领域还是新手。:)

无论如何,我的问题是:我想用这个(不知道正式名称,抱歉)将一些信息从一个页面(我们称它为1.php)发送到另一个页面(我们称它为2.php):

正如你所看到的,这些信息是纯文本的,这是我不喜欢的。有没有一种简单的方法可以在1.php中对上面问号后面的字符串进行加密,然后让2.php(获取传递的信息)对其进行解密?我希望它是一个伴随的东西:


对不起,如果这是一个愚蠢的问题。非常感谢

如果不希望修改信息,请使用哈希字符串来验证它们

例如:

$hash = sha1($user_id."haha".$user_type.$ssn.$first_name.$last_name);
这里的“哈哈”是盐。使用一个随机字符串,它将被使用,以便有人不能重用您的算法来注入假数据

然后将此哈希放在url的末尾,例如

http://localhost/X/2.php?user_id=5&user_type=2&ssn=1234567890&first_name=John&last_name=Doe&hash=$hash`

当您获得此信息时,再次进行散列,并将其与发送的散列进行比较:如果信息被修改,散列将不匹配。

其称为get,从未在双向解密上100%关联,但这可能会帮助您

您可以在一方和另一方使用它-就像一种可能性-但请注意,这仅用于“更好看”的url是你想要的(对我来说,这很难看)。这并不是为了更安全或诸如此类的目的而加密你的数据-要做到这一点,请使用https,并且不要做这些疯狂的事情来迷惑你的用户。

也许你做得不对

是否考虑将数据存储在服务器端会话变量中? 或者甚至在数据库中(如果您正在传递到另一台机器),那么您只需要发送数据库条目的唯一标识符

然后,page2将读取会话变量,或者再次从数据库中检索它

基本上,将数据保存在服务器端,然后就不需要加密/解密了

会话示例: 第1页

<?
session_start();

$_SESSION['pagedata'] = array(
    'user_id'=>5,
    'user_type'=>2,
    'ssn'=>1234567890,
    'first_name'=>'John',
    'last_name'=>'Doe'
    );

header('Location: page2.php');
?>

第2页

<?
session_start();

$user_id = $_SESSION['pagedata']['user_id'];
$user_type = $_SESSION['pagedata']['user_type'];
$user_ssn = $_SESSION['pagedata']['user_ssn'];
$user_first_name = $_SESSION['pagedata']['first_name'];
$user_last_name = $_SESSION['pagedata']['last_name'];

// use variables to do stuff
?>


你应该使用
$\u SESSION

你不喜欢的是什么:数据可能很容易被操纵(在这种情况下,请参见@blue112),还是你不想一开始就透露数据?主要是因为数据是以明文形式透露的,带有我的首字母(愚蠢)解决方案。但使用$_会话数组确实能很好地解决问题。:)+1不过,你应该真正强调使用某种私有(“哈哈”)。你需要在值之间放置分隔符,否则我可以重复使用
user_type=2,ssn=12345
的散列来提交值
user_type=21,ssn=2345
(和类似)。非常感谢,这听起来是一个很好且易于实施的解决方案!如果我可以问一下,公开显示“用户id”(数据库中的主键)是否有任何风险?公开显示姓名和社保号码也有点令人担忧……:)更好的是,使用HMAC(HMAC-SHA-256,HMAC-SHA1,甚至HMAC-MD5)不,这是没有风险的,因为用户不能注入SQL数据(我希望他不能)@阿伦:谢谢你的提示,我的英语不是最好的-我改了。这实际上是一个非常好的主意,我觉得没有考虑它很愚蠢。它几乎解决了我在URL中清晰显示信息的关键问题。谢谢你的回复,也感谢其他人,非常感谢!