首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP,让$_GET忽略url中的数字

PHP,让$_GET忽略url中的数字
EN

Stack Overflow用户
提问于 2013-05-08 17:45:37
回答 11查看 1.2K关注 0票数 3

我目前正在使用一个程序来发送时事通讯,在每个时事通讯中,我都会发送一个链接,这样客户就可以从时事通讯中查看自己的数据和sub/unsub。我现在使用的链接是这样的:http://localhost/Mail/subscriptionseditklant.php?ID=77,由下面的代码组成:

代码语言:javascript
运行
复制
<a href="subscriptionsedit.php?page=1&ID=<?=$objResult["ID"];?>">subscriptions</a>

出于安全原因,我不想显示客户ID=77部件,这样他就不能修改它来查看其他客户信息。我的想法是将ID隐藏在随机数中(4个在前面,4个在后面),我用下面的方法做到了:

代码语言:javascript
运行
复制
<a href="subscriptionsedit.php?page=1&ID=<? echo rand(1000,9999); ?><?=$objResult["ID"];?><? echo rand(1000,9999); ?>">subscriptions</a>

这将显示如下所示的链接:http://localhost/Mail/subscriptionsedit.php?page=1&ID=9755774430

在subscriptionsedit.php上,我使用$_GET从url获取ID。

我的问题是:

有没有办法让$_GET忽略ID中的前4个和后4个数字,以便捕获正确的ID?

我试着在谷歌上搜索这样的东西,但由于我不知道它是怎么叫的(如果它真的存在),我什么也找不到。我希望我的问题是清楚的,但如果你有任何问题,可以问他们!(另外,如果有人知道这个问题的更好标题,请随意编辑它,因为我不知道如何命名这个问题)

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-05-08 17:47:44

隐藏数字是一个糟糕的解决方案,更好的方法是通过http://php.net/manual/en/function.mcrypt-encrypt.php加密这个数字

当然,您可以忽略将这个$_GET‘’var‘转换为char数组的字母,然后使用range,例如

代码语言:javascript
运行
复制
$_GET['var'] = 123543123;

要获得543,您需要使用函数substr()

代码语言:javascript
运行
复制
$hidden_number = substr($_GET['var'],3,3);
票数 2
EN

Stack Overflow用户

发布于 2013-05-08 17:57:10

您可以在服务器上使用一个包含两列的映射表,而不是尝试隐藏id : primary(hash),id

哈希可以是一个随机的blob,但是为了可读性,你也可以使用一个uuid,例如

代码语言:javascript
运行
复制
hash                                 | id
-------------------------------------+----
9d76d130-0119-4d7a-9eed-95ad3617e512 | 123

然后,在url中使用散列。随机散列的优点是,除了服务器端表之外,散列和id之间没有相关性。

可以通过使用uniqid()md5()sha1()获得较小的散列

代码语言:javascript
运行
复制
sha1(uniqid('', true));

替代

如果ID本身是公共的,但您只是想避免篡改,请查看hash_hmac()

代码语言:javascript
运行
复制
$salt = md5(uniqid('', true));
$signature = hash_hmac('sha1', $id . $salt, 'some super secret key');

使用类似于base64_encode(openssl_random_pseudo_bytes(8))的方法生成密钥

您也可以将此$signature$salt添加到URL中,然后在收到它时进行验证。

代码语言:javascript
运行
复制
$id = $_GET['id'];
$salt = $_GET['salt'];

if (hash_hmac('sha1', $id . $salt, 'some super secret key') === $_GET['signature']) {
    // valid
}
票数 2
EN

Stack Overflow用户

发布于 2013-05-08 17:49:02

查看手册中的substr方法:http://php.net/substr

就像这样

代码语言:javascript
运行
复制
$id = substr($_GET['ID'],4,-4); 

应该做你想要的把戏

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16437447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档