如何在CakePHP中生成安全的私有URL?

如何在CakePHP中生成安全的私有URL?,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我喜欢为用户的条目(删除和编辑链接)创建一个安全的URL 例如,这是我的实际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。 是否有任何自定义方法可用? 我

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

例如,这是我的实际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安全函数中搜索,不确定这是正确的方法还是不确定使用哪种算法)

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

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


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

如前所述,“模糊安全”不是很聪明。然而,实现您想要的最简单的方法是将UUID用于表的主键,而不是数字自动递增。

为什么要这样做?所以用户看不到他们要删除的帖子的id?一般来说,你不能取消散列。只有删除和编辑链接我的意思。所以任何用户都不能删除或编辑我的帖子。当然,我可以在我的控制器本身中进行检查,但是,我想让URL看起来安全。我不能说我能看到这种技术的曙光。您可以传递一个命名参数,如
http://localhost/project/blogs/delete/1/hash:4324143563443
但它并没有多大用处。我个人会创建一个
角色
表,并将角色分配给用户。刚刚发现这个:。这就是您想要的吗?您可以使用varchar(36)作为表的主键数据类型。Cakephp将为所有新记录生成UUID。可能值得注意的是,虽然使用UUID意味着主键的顺序是不可预测的,但“受保护”URL仍然可以从“公共”URL中预测,我相当确定OP希望避免这种情况。我认为将不可预测的东西绑定到每个id的最简单方法是在db中存储一些东西(散列等)。不管怎么说,他的方法一开始就很糟糕,所以不管你用什么方式生成url,它都不会真正安全:)