2

我知道这是可能的,我在许多网站上进行了研究,但没有找到任何可以完全满足我需要的东西。

我需要在 URL 中编码和存储两个参数,然后使用 $_GET 方法检索它。

参数不是敏感数据。我的目的主要是混淆它,所以访问者在没有网站访问的情况下无法阅读它。

我有这样的事情:

site.com/?name=john&food=banana%20split

我需要它变成这样:

site.com/g57HT90dw8lC5p

我怎样才能做到这一点?谢谢。

(对不起,我的英语不好)

编辑:我应该多解释一下。

  1. 我知道我将不得不使用 mod_rewrite 并且我已经涵盖了那部分;
  2. 第二个参数是一个完整的句子(带有空格、标点符号等);
  3. 我需要这个来创建圣诞贺卡,所以这些参数都不需要安全方法。我真正需要存储的只是一个名称和一个简单的消息
4

5 回答 5

4

这是错误的方法 - 你说它不敏感,所以你最好修复你的代码,如果有人向你发送精心制作的数据,它就不会被黑客入侵。混淆可以防止普通用户进行更改,但没有技术人员会被此愚弄。此外,许多浏览器的 GET 是有限的(因此可以配置 PHP 和服务器),因此这可能会比您想要的更快地碰壁。但是如果你坚持你想要这种方法,你可以将所有变量放入 json_array,然后使用 base64 进行编码。

$myData = array('foo'=>1, 'bar'=>'hax0r');
$arg = base64_encode( json_encode($myData) );

http://site.com/secret=$arg

然后回来:

$myData = json_decode( base64_decode( $_GET['secret'] ) );

但同样 - 这在设计上是错误的。

于 2012-11-20T19:23:12.813 回答
2

将两个字符串值附加在一起;然后使用一些编码函数,如str_rot13或其他

于 2012-11-20T19:22:04.237 回答
1

你可以对它进行uuencode

创建时

$converted = convert_uuencode('?name=john&food=banana');
// 6/VYA;64]:F]H;B9F;V]D/6)A;F%N80``

并在解码

$query = $_SERVER['QUERY_STRING'];
// 6/VYA;64]:F]H;B9F;V]D/6)A;F%N80``
$real = convert_uudecode($query);
// ?name=john&food=banana

uuencoding 的目的是使数据对网络传输安全。它不提供保护,但会使它们成为明文以外的东西。

于 2012-11-20T19:23:27.643 回答
1

试试这些 PHP 函数convert_uuencodeconvert_uudecode

它比只使用 base64 安全得多

function encrypt_decrypt ($data, $encrypt) {
    if ($encrypt == true) {
        $output = base64_encode (convert_uuencode ($data));
    } else {
        $output = convert_uudecode (base64_decode ($data));
    }
    return $output;
}

$enc_txt = encrypt_decrypt ("name=john&food=banana%20split", true);
echo $enc_txt."\n";
// PTtGJU05M1VKO1ZBTilGOU87VjBdOEYlTjg2WUEpMyhQPFchTDo3MGAKYAo=
echo encrypt_decrypt ($enc_txt, false);
// name=john&food=banana%20split
于 2014-03-28T20:42:22.620 回答
0

查看 PHP 文档Base64Encode。只需对字符串进行编码,并在读取查询时对其进行解码。

于 2012-11-20T19:23:40.750 回答