Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我是否可以防止未经授权的用户在不将文件存储在文档根目录之外的情况下访问文件?_Php_.htaccess_Security_Authentication_Wamp - Fatal编程技术网

Php 我是否可以防止未经授权的用户在不将文件存储在文档根目录之外的情况下访问文件?

Php 我是否可以防止未经授权的用户在不将文件存储在文档根目录之外的情况下访问文件?,php,.htaccess,security,authentication,wamp,Php,.htaccess,Security,Authentication,Wamp,我有一个有趣的难题。。。我在WAMP服务器上托管了几个.mp4文件。我非常了解在文档根目录之外存储文件的方法,并在检索文件内容之前使用PHP脚本对用户进行身份验证。但是,这些.mp4文件必须位于文档根目录中。是否有任何方法可以对试图直接访问其中一个文件的用户进行身份验证?我尝试了一个.htaccess重写,它接受一个以“.mp4”结尾的请求URL,并重定向到一个PHP脚本,该脚本将请求的文件作为参数传递,但这当然只是循环 这是.htaccess文件中的重写规则 RewriteEngine on

我有一个有趣的难题。。。我在WAMP服务器上托管了几个.mp4文件。我非常了解在文档根目录之外存储文件的方法,并在检索文件内容之前使用PHP脚本对用户进行身份验证。但是,这些.mp4文件必须位于文档根目录中。是否有任何方法可以对试图直接访问其中一个文件的用户进行身份验证?我尝试了一个.htaccess重写,它接受一个以“.mp4”结尾的请求URL,并重定向到一个PHP脚本,该脚本将请求的文件作为参数传递,但这当然只是循环

这是.htaccess文件中的重写规则

RewriteEngine on
RewriteRule ^(.*).mp4$ /media/auth.php?file=$1.mp4
其想法是,用户将尝试访问,此reuest将被路由到一个PHP脚本(auth.PHP),该脚本将使用
$\u get['file']
,从URL中提取请求的文件,它将使用
$\u会话
变量对用户进行身份验证,然后使用
头('Location:'.$file)对用户进行身份验证
将经过身份验证的用户发送到实际文件。再一次,我很快意识到,在实现这一点后,它将只是循环

任何帮助都将不胜感激。谢谢

以下是它们不能位于文档根目录之外的原因…

@我不投反对票,非常复杂,但我会尝试一个简短的版本。。。我有一个很严重的问题,就是这个在文档根目录以外的文件中工作得很好。当我使用PHP脚本访问文件时,我能够在Chrome浏览器中查看视频,播放、暂停、回放,以及整个过程。唯一的(大)问题是,当我使用这种方法时,我无法播放视频。当我直接访问.mp4文件时,它提供了下载或强制转换的选项,但是使用PHP脚本,只有下载选项可用。相信我,我已经尝试了一切,包括与两位谷歌开发者讨论。我在Stack Overflow上发布了关于这个问题的帖子,但没有任何乐趣


我不知道为什么这会被否决,这让我很头疼,我只是在寻求建议…

首先,您是否在文档根目录之外通过PHP提供文件时对其进行了测试

当我直接访问.mp4文件时,它提供了下载或强制转换的选项,但使用的是PHP脚本

如果可以的话,您可以简单地阻止对除一个PHP文件之外的所有PHP文件的访问,并使用该文件将其发送出去(您也可以允许访问
*.PHP

#.htaccess
Order Deny,Allow
Deny from all

<Files index.php>
Allow from all
</Files>
然后在名为.htpasswrd的文件中放入如下内容:

#.htaccess
Order Deny,Allow
Deny from all

AuthType Basic
AuthName "Admin Only"
AuthUserFile /pathto/.htpasswrd
require valid-user

Allow from all
admin:$apr1$o48wfurr$5WaWCjD85kBu/ydGKsQeq/
您可以使用类似的方法来散列密码

然后,当您为Chrome提供url时,您必须包含
user:pass@
部分以绕过登录

http://user:pass@somedomain/path/to/video.mp4
如果你不想将此绑定到现有登录,你必须创建一些系统来将htpasswrd文件中的密码同步到你的用户。这真的不太难。我制作了一个将我们的站点用户帐户同步到sFTP服务器的系统,这是一个真正的痛苦,因为安全性,我们有3个sFTP服务器(遗留、普通和开发)。无论如何,您基本上只需保留其用户/密码的列表,然后在创建/删除用户或更改其密码时更新文件

也许它会起作用(我真的不知道…哈哈)


值得一试。

“但是,这些.mp4文件必须位于文档根目录中。”为什么?
Deny from all
Allow from all
.htaccess
中-拒绝对目录中的所有内容的访问,然后允许访问
index.php
,如果您愿意,您可以从中提供文件。只要您的php脚本返回适当的
内容类型
内容长度
标题,您的browser不能区分文件的直接链接和PHP封送的链接。您也可以在htaccess中使用
BasicAuth
,然后通过URL
提供密码http://user:pass@somedomain/path/to/video.mp4
听起来你的脚本发送了错误的标题,你应该问一下;我觉得OP使用的是PHP,他们的“经过身份验证的用户”来自数据库,而不是这种“变通方法”。不过,我可能错了,这是我唯一能想到的克服“bug”的方法它们会进行描述,因为PHP没有为文件提供服务。
当我直接访问.mp4文件时,它会给我下载或强制转换的选项,但使用PHP脚本
,我只会说它们的响应头不正确。OP应该很容易比较这两个响应,看看它们缺少什么(这正是所说的)哦,我没有看它。我从来没有做过任何关于视频的事情,主要是我做后端编程之类的……所以我甚至不知道如何播放视频……哈哈。我用htpassword和htaccess锁定了很多Joomla或Wordpress的旧网站。。。。(不要问,不是我的网站……这让脚本小子很难破解它们,因为他们只能访问index.php)你可以用MD5和php(哈哈)对它们进行散列。我散列了所有东西……真的。