【问题标题】:Encrypted data in URLsURL 中的加密数据
【发布时间】:2011-05-19 20:55:14
【问题描述】:

我正在开发一个 PHP 应用程序来管理一家公司的订单。要查看订单,URL 当前是/orders/view/3502

我不希望订单 ID 号出现在 URL 中,所以我使用 CodeIgniter 的加密库对 URL 中的 ID 进行加密。 URL(加密后)看起来像/orders/view/AaffGdQQ

我遇到的问题是有时加密的 ID 包含正斜杠或加号,它们在 URL 中无法正常工作。 CodeIgniter 根据斜杠读取 URL,因此,如果加密的 ID 有斜杠,它会将其读取为 2 个变量,而不是一个。此外,加号被解释为 URL 中的空格。

那么,我的问题是,如何加密 ID 并确保字符串不包含加号或斜线?

编辑:我想看看加密的 ID 是否包含斜线或加号,如果包含,请再次加密。出于某种原因,每次对 ID 进行加密时,它都会有所不同,所以这会起作用。

【问题讨论】:

  • 在 URL 中显示订单 ID 有什么问题?
  • 出于“安全原因”,我的老板不希望它在那里。
  • 您应该通过检查用户是否真的有权查看订单来保护订单,而不是通过混淆网址。
  • @newbie:也许他们不希望客户看到低 ID ;)
  • @thejh 那么他们应该使用其他东西作为数据库中订单的 ID

标签: php codeigniter mcrypt


【解决方案1】:

您也可以使用 base64_encode()。这也将使它更长,看起来“更安全”。还加了一层混淆。

【讨论】:

  • 是的,但是您已经使用 codeignighter 对其进行了加密 :-) - 这将从加密字符串中删除那些不能在 URL 中使用的字符。还会混淆加密的字符串。
  • 哦,你是说base_64加密数据?这是个好主意。
  • base64_encode("$n(ryp7$)+/as89ijd&*");返回 KHJ5cDckKSsvYXM4OWlqZCYq
  • 如你所见,所有的特殊字符都被删除了:-D
  • 您可以在使用 codeignighter 解密之前对 GET 数据使用 base64_decode。
【解决方案2】:

也许通过urlencode() 传递加密数据可以解决这个问题?完成此操作后,您必须在 CodeIgniter 之前拦截数据,并在其上运行urldecode()

只是一个快速的想法,祝你好运!

【讨论】:

  • 这不会使 URL 膨胀吗?好吧,只是一点点,所以它可能是可以接受的。
  • 腹胀是怎么回事? Stack Overflow 膨胀得很好......它不应该膨胀太多,因为可能会增加约 5 个字符的长度。
  • 我试过了,但是 URL 中的 urlencodeed 加号仍然被解释为空格,并且 urlencoded 斜杠仍然是斜杠。
【解决方案3】:

查找加密不使用的一些字符,并根据需要替换它们。使用 url 时,撤消它。

【讨论】:

  • 我其实是在想这个。或者更确切地说,再次加密它。每次我对 ID 进行加密时,都会有所不同。
猜你喜欢
  • 2010-10-14
  • 2015-03-09
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
相关资源
最近更新 更多