背景资料:
我正在一个网站上工作,该网站将通过订阅服务提供图像和视频内容。也就是说,只要用户成功登录,用户就应该只能访问图像和视频内容。 (注意:登录系统使用MySQL DB的组合 - 存储用户名和密码 - 和php创建新的用户会话/身份验证等。)
问题:
如何阻止用户(登录或不登录)直接访问图像和视频文件?例如,未登录的用户可以直接访问该文件,如下所示:www.domain.com/testvideo.mp4 - 这将在浏览器中呈现视频内容,供他们观看或与他人共享。 (注意:我仍然需要能够通过HTML,CSS,PHP等在现场使用/显示图像和视频文件)
我已经尝试了几个.htaccess解决方案(包括:RewriteCond / RewriteRule& .htpassword),这些解决方案已经成功阻止了直接访问,因此阻止了通过HTML,CSS,PHP等在现场使用文件的能力。
我认为这一定是一个非常普遍的问题,如果是这样,解决问题的最佳方法是什么?
答案 0 :(得分:3)
这是一个非常常见的解决方案。为了强制访问控制,您必须在提供文件之前调用PHP脚本并验证凭据。然后,如果凭据有效,请提供实际文件。
您可能想要使用readfile
之类的东西直接从PHP脚本提供文件。这将破坏您的服务器性能并破坏客户端的恢复下载。
幸运的是,有一个解决方案,你可以将实际的文件服务交还给网络服务器。
其工作原理如下:
/file.mp4
的请求。/serve.php
。示例脚本可以是:
$file = '/tmp/file.mp4'; // it is in your best interest to make this file inaccessible for a direct download
header('X-Sendfile: ' . $file);
header('Content-Type: ' . contentType($file));
header('Content-Disposition: inline;');
为了使其正常工作,您必须在Apache上安装mod_xsendfile(https://tn123.org/mod_xsendfile/),这可能已经是您的主机的情况。您还必须插入一些行来配置它并设置正确的重写。
你可以通过发布" mod_xsendfile php"来解决Google上很多问题,这可能也会有很大的帮助。
希望有意义!
答案 1 :(得分:0)