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

时间:2010-11-10 10:02:33

标签: php security url encryption

对不起,如果标题不清楚,由于我还是这个领域的新手,我想不出更好的事情。 :)

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

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

正如您所看到的,信息是纯文本的,我不喜欢。有没有一种简单的方法可以在1.php上面的问号之后加密字符串,然后让2.php(获取传递的信息)解密它?我希望它能成为现实:

http://localhost/X/2.php?user_id=rj3i15k&user_type=8109fk1JIf&ssn=6893kfj399JFk ...

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

5 个答案:

答案 0 :(得分:4)

如果您不想修改信息,请使用哈希字符串进行验证。

例如:

$hash = sha1($user_id."haha".$user_type.$ssn.$first_name.$last_name);

这里的“哈哈”是一种盐。使用随机字符串,它将被使用,因此有人无法重复使用您的算法来注入假数据。

然后将此哈希值放在网址的末尾,例如

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

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

答案 1 :(得分:3)

也许你的方式错了。

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

然后

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
?>

答案 2 :(得分:2)

它被称为GET,在2路解密时从不关联100%,但这可能对你有用Best way to use PHP to encrypt and decrypt passwords?

答案 3 :(得分:2)

你可以在一边使用base64_encode而在另一边使用bas64_decode - 只是作为一种可能性 - 但请注意,这只是为了“更好看”你想要的网址(对我来说, 这个很难看。这不是为了更安全或类似的事情来加密您的数据 - 要实现这一点,使用https并且不要通过做这些疯狂的事情来混淆您的用户。

答案 4 :(得分:1)

您应该使用$_SESSION