php - 如何保护在 URL 中传递的 ID?

标签 php encryption

有一个在 URL 中传递 id 值的典型网站。前任。 account.php?id=755

在 account.php 页面中我确实检查了值

$id = 0;
if(isset($_GET['id'])){
    $id = intval($_GET['id']);
}
if($id == 0){
    echo 'this account does not exists!';
    exit();
}

但是,我正试图设法在显示值 755 之前对其进行加密,然后在检查该值之前对其进行解码。所以我没有显示实际的 ID,而是显示了一个掩码。

我的问题是: 1) 这是加密和解密 ID 的好主意吗?所以将传递一个掩码而不是实际的 id。 2) 是否有一种使用 PHP 返回仅包含数字和字母混合的字符串来加密 ID 的简单方法?

最佳答案

But, I am trying to find away to encrypt the value 755 prior displaying it and then decode it prior checking the value. So I am not displaying the the actual id but a mask.

这似乎是一个非常麻烦的想法。但是,如果它对您和安全意味着什么,那么您需要设计一种适合您的编码/解码方案。在最简单的层面上,您或许可以对 id 进行 base64_encode,然后使用 base64_decode 对其进行解码。下面的例子只是说明性的。请根据您的需要进行清洁和调整。

$encrypted_id = base64_encode($id);

现在要取回它,只需运行 base64_decode:

$decrypted_id = base64_decode($encrypted_id);

但这很容易破解。

更好的方法可能是创建一些 secret “盐”以添加到只有您的系统知道或理解的 ID。

$salt="MY_SECRET_STUFF";
$encrypted_id = base64_encode($id . $salt);

这样,如果 $id 解码不考虑盐,那么简单地使用 base64_decode 是没有意义的:

$decrypted_id = base64_decode($encrypted_id);

只有在解密过程中加入盐后,它才会有用地解码:

$decrypted_id_raw = base64_decode($encrypted_id);
$decrypted_id = preg_replace(sprintf('/%s/', $salt), '', $decrypted_id_raw);

逻辑是原始解密 ID 仍然混合了盐,preg_replace 会将其去除。因为只有你知道“盐”你猜怎么着?你很安全!但是当然,如​​果您出于某种原因放盐,您的整个系统将毫无用处,因为谁知道您的 ID 是什么。

但同样,除非保护用户 ID 是您应用的目标并且对安全性真正至关重要,否则这似乎过分了。如果有人猜出一个 ID,最糟糕的情况是什么?以及如何针对这种“最坏”的情况进行编程。

关于php - 如何保护在 URL 中传递的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914249/

相关文章:

php - 如何获取从 file_get_contents() 派生的内容的大小

c# - 应该在编码中使用什么加密以及它如何影响 key 和初始化向量?

C 凯撒密码错误随机字符串输出

.net - 存储 SQL 连接详细信息 - 如何安全地加密每个用户?

php - Laravel 原始查询分页;对 Eloquent 对象的原始查询

php - Fusion Tables API : How do I make a PUT request to update a style via Ruby, JavaScript 或其他语言?

php - 如何将关联数组映射到 html 元素属性?

php mail() header 阻止电子邮件发送

Python逐字节异或解密

java - 加密大字节数组