只能通过页面访问php文件

只能通过页面访问php文件,php,Php,我通过一个php文件(我们称之为serveMedia.php)向index.php提供图片和视频。 我使用mod_rewrite、php会话和URL中包含的令牌从index.php调用这些媒体文件,例如src=“media=SOMEFILENAME&type=jpeg&token=2134573946284615492345” 媒体文件本身位于一个文件夹中,其访问权限受.htaccess限制(deny from all) 现在我的问题是:有没有可能只通过我的index.php访问这个URL? 我

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

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

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

这就是我目前的工作:

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

谢谢你的帮助

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

if($_SERVER['HTTP_REFERER'] == 'my/index.php') {
  //serve page
}
加密一个变量(如当前日期)并将其放置在“gate”链接中。当您到达新页面时,脚本将解密变量,如果变量不匹配或甚至不存在,脚本将重定向到另一个页面

比如:

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

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

其他方面,您必须依赖会话,即您以前的方法,或者您可以使用HTTP\u Refferer(不可靠)

在这里:

这是特定于浏览器的,并不总是设置的,对吗?我引用的页面名称不是静态的……我使用
$token=md5(uniqid(rand(),true))生成令牌。我尝试了
if(isset($\u SERVER['HTTP\u REFERER'))
,但这不安全,例如iPhone将不再播放视频。如果您使用HTTP\u REFERER,则在页面上生成值,在数据库中存储相同的值,在提供视频的页面上使用$\u GET['pass']检索通过值并用数据库值确认它是否匹配继续,否则重定向。