2012-06-06 135 views
0

我认为这个问题应该是一件容易的事情,但在搜索整个网络后我无法找到答案,所以我决定在这里问。允许上传和浏览但不允许下载

我在我的网站上有一个文件上传器,它使用php。上传文件的文件夹有777个chmod。我也有一个PHP脚本来列出该文件夹中的文件。我需要的是允许php上传和浏览该文件夹中的文件,但不允许人们这样做。我想象的唯一解决方案是将该文件夹映射到与默认不同的另一个用户,因此我可以稍后在filezilla中chmod并仅允许所有者执行此操作,以便人们可以通过php脚本的输出查看文件,但如果它们不是导航到该文件夹​​。

即时通讯使用Debian,apache2。我想知道我能做些什么。我的目标是:允许php上传,读取,写入和执行文件夹中的文件,但除非他们使用我的PHP脚本,否则不会客户端。

在此先感谢

回答

1

把你正在谈论的所有文件放在他们自己的目录中。将.htaccess文件添加到该目录。 .htaccess的内容应该是deny from all

这将阻止任何用户手动访问文件,因为访问将被阻止。您的PHP脚本仍然可以浏览文件的内容,并以正确的内容类型作为附件提供。

有关如何服务下载PHP中的文件的详细信息,请阅读本:https://serverfault.com/questions/316814/php-serve-a-file-for-download-without-providing-the-direct-link

+0

你能解释一下我的“他们自己的目录”是什么意思?我尝试使用.htaccess文件,但我仍然可以从直接链接下载文件。我不想以任何方式提供下载服务。我只是想用php脚本显示那个文件夹的内容(已经完成)。但我不希望任何人能够以任何方式下载它们,只是为了上传。 – Karevan

+0

如果将'htaccess'文件放在一个具有'deny from all'的目录中,则该目录中的所有文件将不再可访问。 – xbonez

+0

对不起,但不是为我工作,我在我的文件所在的文件夹中添加了.htaccess,并且不带引号的“全部拒绝”,但我仍然可以从浏览器下载文件 – Karevan

1

所有服务,包括Web服务器中这是在OS的帐户安全上下文中运行,例如Apache的开始使用Apache apache组中的用户。只需更改模式并将所有者更改为此用户和组即可。永远不要chmod目录到777,直到有一个很好的解释。使用这个技巧,Web服务进程只能在该目录中读取,写入和执行。

同样,如果您希望浏览器客户端不要查看(读取)该目录的内容,则应该拒绝该目录中的列表。我认为这是默认禁用的。

+0

我的目录是:mapuploader所以我应该只是:chown -R apache mapuploader? :s – Karevan

+0

我现在明白了。是。你应该首先将它切换到apache用户。 chown -R apache apache mapuploader/ –

+0

那么我的问题是:我应该让哪个用户成为该文件夹的所有者? “apache”用户不存在,我使用top命令查看进程所有者,并在apache2进程中有两个所有者:root和www-data。我尝试了两种方式,并与万维网数据,其始终公开(如使每个人的所有者),并与根php不能读取它 – Karevan