加密或隐藏网址中发送的字符串

时间:2010-09-01 17:09:36

标签: php mysql url

我正在尝试在网址中发送主题名称,例如

<a href="hello?TopicN=blahblahblha">

然后输出主题名称作为论坛主题标题。但问题是用户可以只改变名称,如果他们想要哪些不会造成任何伤害,因为我真的没有做任何名字,但我想知道有没有办法加密或交换字母所以它不是那么明显什么主题N是吗?

我也试过md5加密但是,md5只有1种方式,所以没有帮助。可以使用会话,不确定,因为我在会话中存储用户登录详细信息,

任何想法和示例都会有所帮助,

谢谢

4 个答案:

答案 0 :(得分:4)

MD5是散列,而不是加密,因此无济于事。

考虑将标识符传递给数据库中的一行,以便查找标题。

<a href="hello.php?TopicN=1234">

信任客户是一个很大的禁忌,原因很多,这就是其中之一。

使用会话来存储这些信息会起作用,但考虑到(我怀疑)TopicN可能(或确实)经常更改,这似乎是不合适的。

祝你好运!

伊恩

答案 1 :(得分:3)

您可以使用base64_encodebase64_decode,这样就不那么明显了。

base64_encode(blahblahblha)= YmxhaGJsYWhibGhh

base64_decode(YmxhaGJsYWhibGhh)= blahblahblha

我会质疑这项要求的目的或好处。

答案 2 :(得分:1)

我会建议你做相反的事。

使其更具搜索引擎和用户友好,如下所示:forum / thread / blabla

如果您正在使用Apache搜索重写引擎

答案 3 :(得分:0)

试试这个:

文件:.htaccess

RewriteEngine On
RewriteRule url/(.*) url_parser.php?url=$1 [L,QSA]

带链接的文件:

<a href="<?php echo base64_encode("hello?TopicN=blahblahblha"); ?>">Link</a>

文件:url_parser.php

<?php
$encodedURL = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);

$unencodedURL = base64_decode($encodedURL);
$urlParts = parse_url($unencodedURL);

$newURL = $urlParts['path'];

// See if there are any extra _GET parameters on this URL:

// Add encoded _GET params:
$newURL .= '?' . $urlParts['query'];

// Add extra _GET parameters:
$newURL .= '&' . $_SERVER['QUERY_STRING'];

// Add any passed #
$newURL .= '#' . $urlParts['fragment'];

// Redirect to the new URL:
header('Location: ' . $newURL);

// If you want to hide the URL completely, do this:
readfile($newURL);