仅通过页面访问php文件

时间:2012-12-08 11:22:55

标签: php

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

限制访问的文件夹中

现在我的问题:是否有可能只通过我的index.php访问此URL? 我试图实现的是,用户只有在通过我的页面传送内容时才能看到内容,而不是在访问它的URL时。

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

这就是我现在正在做的事情:

的index.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'];
};

serveMedia.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);
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

加密变量(如当前日期)并将其放在“gate”链接中。当您到达新页面时,脚本会对变量进行解密,如果该变量不匹配或者甚至不匹配,则脚本会重定向到另一个页面。

类似的东西:

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

有几个库可以为你做所有的加密/解密。

其他明智的你必须依赖会话,即你的Previous方法或你可以使用HTTP_Refferer(不可靠)

这里: Restricting access to page unless coming from a specific page

答案 1 :(得分:0)

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

if($_SERVER['HTTP_REFERER'] == 'my/index.php') {
  //serve page
}