我通过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);
}
感谢您的帮助!
答案 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
}