【问题标题】:Is it advisable to encrypt url parameters instead of having them be in plain text?是否建议加密 url 参数而不是使用纯文本?
【发布时间】:2011-09-01 08:05:57
【问题描述】:

我已经让另一位开发人员提出了将所有参数组合和加密/混淆到 php 页面的可能性,作为防止通过精心设计的 url 进行操作并防止数据库内部知识的安全措施(例如,知道特定条目的数据库)。

换句话说,不是单个或多个公共查询参数(如 id),而是单个加密 blob,将在服务器端解密,并在制作链接时重新加密。

这种方法有问题吗?是否有使其值得的实质性优势?这种方法在野外使用效果好吗?

【问题讨论】:

  • 我可以看到的一个潜在缺点是它使测试变得更加困难,因为你不能只输入你想要的任何值,而是必须重新创建加密的 blob

标签: php url encryption parameters


【解决方案1】:

您应该设计您的系统以防止未经授权的访问。混淆(不可能对客户端生成的数据进行有用的加密)是不值得的防御。

相反,不是给用户一个数据库 ID,而是给他们一个 ID 的散列(可能带有会话种子)。 128 位以上的哈希搜索空间和(对于合理的数据库大小)低碰撞概率将是一个更好的方法。您还可以加密服务器上的 ID 以获得客户端永远不需要操作的值(使用种子),但确保它具有与我提到的哈希相同的属性 - 即搜索空间与可能的值空间相比非常大.

【讨论】:

  • 当它只是第一段时,我更喜欢这个答案。 :)
  • @sarnold:我也是,但我想为可能的解决方案折腾。
【解决方案2】:

在某些情况下,这种类型的 URL 加密(或混淆)很有用。假设您在应用程序中构建了一个非常强大的安全性,并且您的所有主机都安全无虞。

现在,如果您的操作人员恰好是外部人员,并且您不希望他们通过动态更改日志级别来知道/看到这些敏感数据 (ID),那么最好根据个人需要对其进行加密和解密模块。

作为一般惯例,不应在 URL 参数中传递任何敏感数据,并且即使在更高级别也应注意不要记录它们。

【讨论】:

    【解决方案3】:

    如果你想防止用户弄乱 GET 参数,我建议如下:

    为您的所有页面添加隐藏表单。单击页面上的任意位置,将在表单中填写一些数据并通过 POST / SSL 安全地提交。在提交详细信息旁边,传递您希望将用户引导至的 URL。

    在服务器端,收集参数,将它们放入会话中,无论是全局还是在您附加到目标 URL 的某种标识符下。发回重定向。这样,如果用户刷新页面,他就不会抱怨 POST 数据。此外,如果他开始在应用程序中返回和横向移动,请终止该会话缓存并将他发送到起始页面。

    我在一些网上银行软件中看到了这种技术。另一个好处是用户无法打开新窗口。

    在我看来,它可以增加一定程度的安全性,但会严重改变开发方法并给你更多的工作。我自己从来没有使用过这种方法,我认为只要你有一个适当的 ORM 系统就可以安全地传递 ID,无论你的开发人员使用什么样的代码,在任何情况下都不会让用户 A 访问用户 B 的数据会写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2011-04-06
      相关资源
      最近更新 更多