【问题标题】:How to generate secure private urls in CakePHP?如何在 CakePHP 中生成安全的私有 URL?
【发布时间】:2012-12-30 13:06:42
【问题描述】:

我喜欢为用户的条目创建一个安全的 URL(删除和编辑链接)。

例如,这是我的实际网址

http://localhost/project/blogs/delete/1/test-title

我想做的是,

http://localhost/project/blogs/delete/4324143563443/test-title (some hash made of salt+user auth id)

我的主要目的是创建一个安全哈希以及删除和编辑方法的 URL。 是否有任何自定义方法可用? 我在 CakePHP 安全函数 http://book.cakephp.org/2.0/en/core-utility-libraries/security.html 中进行了搜索,但不确定它是否正确或不确定使用哪种算法)

【问题讨论】:

  • 你为什么要这样做?所以用户看不到他们要删除的帖子的ID?一般来说,您不能取消散列哈希。
  • 仅用于删除和编辑我的意思的链接。所以任何用户都不能删除或编辑我的帖子。当然,我可以在我的控制器中进行检查,但是,我想让 URL 看起来安全。
  • 我不能说我可以在这项技术的隧道尽头看到光明。您可以传递一个命名参数,例如http://localhost/project/blogs/delete/1/hash:4324143563443,但它并没有真正起到多大作用。我个人会创建一个roles 表并为用户分配角色。
  • 刚刚发现:github.com/signified/CakePHP-Crypt-Component。是你要找的吗?
  • 您可以使用 varchar(36) 作为表的主键数据类型。 Cakephp 将为所有新记录生成 UUID。

标签: php cakephp cakephp-2.0


【解决方案1】:

首先,虽然我不太清楚您要如何/为什么要这样做,但听起来您想通过隐藏它们的 URL 来“保护”这些链接。这被称为“Security through Obscurity”,通常不受欢迎。

在 Cake(和大多数应用程序)中,实现此目的的常用方法是允许用户登录(参见:Auth Component),然后,例如,在您的删除操作中(即 URL /delete/1)将检查请求是否存在有效的用户会话,以及用户是否具有足够的删除权限。

虽然我强烈建议不要这样做,但如果您确实希望创建这些晦涩的 URL,那么您应该使用 Security::hash();。这样做的问题是,您不能只对 id 进行散列,然后直接从散列中确定 id(这就是重点!)。相反,您需要将哈希存储在数据库中,然后查询哈希(每个帖子都可以有一个从 id 或随机数据生成的唯一哈希,两者都可以)。

【讨论】:

    【解决方案2】:

    如前所述,“默默无闻的安全性”并不是很聪明。然而,实现您想要的最简单的方法是使用 UUID 作为表的主键,而不是数字自动增量。

    【讨论】:

    • 可能值得注意的是,虽然使用 UUID 意味着主键的顺序是不可预测的,但“受保护”的 URL 仍然可以从“公共”URL 中预测,我很确定这是什么OP想要避免。我认为将不可预测的东西绑定到每个 id 的最简单方法是在数据库中存储一些东西(哈希等)。
    • 对。无论如何,他的方法首先是蹩脚的,所以无论您生成网址的方式如何,它都不会真正安全:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多