查看照片和相册的临时权限

时间:2009-06-17 17:48:12

标签: php mysql authentication permissions

我正在制作一个画廊网站。默认情况下,照片和相册应隐藏在公众之外,但所有者可以根据需要共享公共URL。我也想使用短网址。

我正试图找出最好的方法来做到这一点。起初我以为我可以拥有一个MySQL表,其中包含简短的URL代码(类似Zneg8rjK)和完整的URL(/album/5/)。当用户访问此链接(mysite.com/Zneg8rjK)时,它会设置一个会话变量,它只是/album/5加上一个salt的哈希值,然后将它们重定向到完整的URL。然后在该页面上我可以重新搜索当前页面并检查它是否在他们的会话中。没问题......但是当他们点击那张专辑中的照片时会发生什么?它崩溃了。

所以,我想到的下一个解决方案是我应该为每张专辑和每张照片存储一个密钥,然后有一个公共地址,如/album/5/secretkey。简短的URL可以指向这个。但是,如何授权用户查看相册中的所有照片?我应该只是链接每张照片以指向照片网址的秘密版本,但前提是他们是否通过秘密相册网址访问了相册?我担心的是,我希望尽可能地将密钥/ URL保留在地址栏之外,这样用户就不会意外地与他们不应该分享的人分享...但如果没有,那么这不是一个大问题。任何更好的解决方案。

思想?


等一下,我甚至需要哈希这个网址吗?客户端无法修改会话变量吗?

3 个答案:

答案 0 :(得分:2)

我想这取决于你如何检查权限 - 我建议有一个整张专辑的密钥,以及个人照片的密钥。

帖子第一部分中的重定向事实实际上对我来说听起来不是很糟糕,只有你必须在会话中检查提供的密钥对2个有效选项 - 一个用于单个照片,一个用于包含该照片的相册。如果其中任何一个验证,则显示照片(而不是“分解”)。

希望这有帮助!

答案 1 :(得分:1)

你可能想要像上面提到的那样做两个键。您可能不希望通过一个URL限制访问,例如mysite.com/hashhere,您应该让短URL能够包含哈希,因此如果他们有正确的哈希,无论他们去哪个链接,他们都可以查看它

为了使其更加安全,请为图库的所有者提供刷新哈希密钥的选项,这样如果他们与用户共享并且某人发布了公共网址或其他内容,则可以再次将其锁定。

答案 2 :(得分:0)

好的,这就是我正在做的事情:

$result = mysql_safe_query('SELECT * FROM short_urls WHERE short=%s', $_GET['p']);
if(mysql_num_rows($result)> 0) {
    $url = mysql_fetch_assoc($result);
    $_SESSION['permissions'][$url['long']] = true;
    redirect($url['long']);
}

这会将权限保存在会话变量中,并将用户重定向到正确的页面。然后在照片页面上我这样做:

if(array_key_exists('/photo/'.$photo_id, $_SESSION['permissions'])
    || array_key_exists('/album/'.$photo['album_id'], $_SESSION['permissions'])) {
    $can_see = true;
}

但我仍然不确定我对此感觉如何。如果在某个时候我希望我的短网址指向/photo/5/some_other_param,该怎么办?它将正确地重定向用户,但它会在权限数组中存储错误的变量。我想我应该做的是在我的short_urls表中添加另一列,指定它应该放入权限数组中的确切内容,是吗?


其实我觉得我更喜欢这个解决方案。这样,并非每个短URL都必须设置权限。新代码:

if(isset($url['perm_key'])) $_SESSION['permissions'][$url['perm_key']] = true;
相关问题