0

我通过一个 php 文件(我们称之为serveMedia.php)向我的 index.php 提供图片和视频。我使用 mod_rewrite、php-sessions 和 URL 中包含的令牌从 index.php 调用这些媒体文件,例如src="media=SOMEFILENAME&type=jpeg&token=2134573946284615492345" 媒体文件本身位于一个文件夹中,由 .htaccess ( deny from all)限制访问

现在我的问题是:有没有可能使这个 URL 只能通过我的 index.php 访问?我试图实现的是,用户只有在通过我的页面传递内容时才能看到内容,而不是在他们访问它的 URL 时。

也许有一些我不知道的高级 .htaccess 或 php-options?我在托管空间,所以这两个可能是我唯一的选择。

这就是我目前正在使用的:

索引.php

ob_start();

session_start();

if (!isset($_SESSION['token']) || $_COOKIE['PHPSESSID'] !== session_id()){
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
}
else {
    $token = $_SESSION['token'];
};

服务媒体.php:

if(isset($_GET['token']) 
    && $_GET['token'] == $_SESSION['token'] 
    && $_COOKIE['PHPSESSID'] == session_id()){

        //streamthisfile!

else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
    session_regenerate_id(true);
    session_destroy();
    unset($_SESSION);
}

感谢你的帮助!

4

2 回答 2

1

加密一个变量(如当前日期)并将其放在“门”链接中。当您到达新页面时,脚本会解密变量,如果它不匹配或什至不存在,脚本将重定向到另一个页面。

就像是:

     <a href="restricted.php?pass=eERadWRWE3ad=">Go!</a>

有几个库可以为您完成所有加密/解密。

否则,您必须依赖会话,即您以前的方法,或者您可以使用 HTTP_Refferer(不可靠)

此处: 限制对页面的访问,除非来自特定页面

于 2012-12-09T08:35:45.770 回答
0

通常,HTTP 标头referer设置为图像请求的源页面,因此您可以使用它来确定您是否提供资源。

if($_SERVER['HTTP_REFERER'] == 'my/index.php') {
  //serve page
}
于 2012-12-08T11:44:50.487 回答