只能通过页面访问php文件
我通过一个php文件(我们称之为serveMedia.php)向index.php提供图片和视频。 我使用mod_rewrite、php会话和URL中包含的令牌从index.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? 我
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']检索通过值并用数据库值确认它是否匹配继续,否则重定向。