【问题标题】:Obfuscating GET id variables with encryption, surrogate key, etc使用加密、代理密钥等混淆 GET id 变量
【发布时间】:2012-07-31 16:56:24
【问题描述】:

我正在开发一个新应用程序,为了掩盖它处于初期阶段的感觉,我想掩盖任何可能揭示这一点的实例,例如,
$postId=000001。相反,我们会得到$postId=sH4d6s8d。一些简短但独特的东西。

我已经阅读了其他几个问题,不幸的是,大多数答案都涉及安全问题。应用程序安全性在这里不是问题,我只是在寻找一种方法来通过 GET 传递行 id 的模糊表示,并让该 URL 可共享,这意味着多台用户机器可以解释混淆。

我略读了 MySQL、XOR 的代理键,但我还很陌生,我的理解很快就糊涂了。这里有什么合适的解决方案?有什么例子吗?谢谢。

更新

决定采用简单的 XOR + urlencode 解决方案。即:

$v = urlencode($var ^ $key)
$v = (urldecode($v) ^ $key)

从目前的测试来看,这对我的目的来说似乎很棒。但是,看起来 Firefox 会自动解码 urlencode 以进行显示,这违背了这个想法的全部目的:

$v = r%5CQXr%5CQXr%5CP
<a href="whatevs.php?id=$v">link</a>

// Firefox renders the below anywhere link is visible (besides source)

whatevs.php?id=r\QXr\QXr\P 

这很烦人。虽然 id 仍然是模糊的,并且源仍然是“传统的”urlencoded,但这些字符在 url 中看起来并不自然。但真正的问题是任何复制/粘贴链接的人都无法获得正确的资源。

有没有简单的解决方法?

【问题讨论】:

  • 您为什么不以更大的数量播种您的 ID?
  • $postID = $baseNumber + $realNumber
  • 好吧,我撒谎了。这些都是很棒的 cmets,但不太符合要求。骗子是一个缩短器,不考虑简单的 id,比如“0000001”。试图掩盖如此低的整数是闻所未闻的吗?只是附加另一个数字也略微偏离,宁愿掩盖整个字符串。

标签: php mysql encoding obfuscation


【解决方案1】:

Xor + 将其转换为 base 36 + 反转字符串?

$key = 123456789;
$post_id = (1 ^ $key);
$post_id = strrev(base_convert($post_id, 10, 36));
echo $post_id;

【讨论】:

    【解决方案2】:

    你说这不是一个安全问题,但你为什么要保护你的 GET 参数?如果您的目的是隐藏真实值,那么这是一个安全问题^^如果您只想在数字和混淆代码之间创建双射,您可以使用像base64_encode这样的可逆函数,但任何人都可以解码它。

    【讨论】:

    • Base64_encode 可能是最好的解决方案,它很长且易于识别。就像你说的,我只是希望 id 的感知与其实际价值不同。在这种特殊情况下,知道真正的价值不是应用程序安全问题,而是营销安全问题。
    猜你喜欢
    • 2015-10-08
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多