除了浏览器

时间:2017-08-15 18:47:55

标签: php .htaccess file-upload

我在php中编写了一个脚本来上传徽标图片。它工作正常。

但我的应用程序被用于几个人,他们都可以上传他们的徽标。所以我创建了这条路径: '上传/ IDCLIENT / logo.png' 那是有效的!

但是如果在我的浏览器中我将网址设置为:http://mydomain/uploads/IDCLIENT/logo.png,我可以看到它。如果我设置为http://mydomain/uploads/ANOTHER_IDCLIENT/logo.png,我可以看到其他用户的徽标。这很令人尴尬。

我的根目录下有一个.htaccess文件:

RewriteEngine on

RewriteRule ^([a-zA-Z0-9\-\_\/\\?\=]*)$ index.php?p=$1 [QSA]

所以我试图在'uploads'目录中添加一个htaccess文件:

Order Deny,Allow
Deny from all

这个工作,我在我的应用程序中设置url但我看不到文件,我看不到文件,徽标无法显示。

有没有办法禁止直接访问uploads目录(当我们设置url时)并在我的HTML文件中的uploads目录中显示文件。

感谢。

3 个答案:

答案 0 :(得分:0)

编辑:要扩展您的问题:

使用Deny from all(顾名思义)拒绝对您指定.htaccess拒绝的特定文件/目录的所有请求。

您也通过执行此操作来拒绝服务器访问文件/目录(即使是本地主机127.0.0.1),因此它无法直接从文件夹中获取图像并显示它。

那你需要做什么?您需要允许server / localhost直接访问该文件/目录。

通过在现有的两行代码下使用allow from 127.0.0.1将IP添加为列入白名单的项目,将允许您的本地主机直接访问。

答案 1 :(得分:0)

对此的建议是将IDCLIENT更改为使用不同类型的密钥。我想你可能正在使用递增整数。

一个好的解决方案是使用UUID4。

所以网址就是这样:http://mydomain/uploads/619df8f5-24aa-4a70-aa84-dedb1e5eeea5/logo.png

这将使得猜测另一个客户的存储文件夹变得越来越困难,如果不是不可能的话。

有关UUID 4的更多信息:https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29

UUID 4的PHP包:https://github.com/ramsey/uuid

答案 2 :(得分:0)

我找到了解决方案: 我修改我的根目录中的.htaccess文件,我添加一行:

RewriteEngine on

RewriteRule ^([a-zA-Z0-9\-\_\/\\?\=]*)$ index.php?p=$1 [QSA]

# redirect the request views/img/shared_uploads/ TO views/img/logo
RewriteRule ^views/img/shared_uploads/(.+)$ /views/img/logo/$1 [NC,L,R=302]

如果我设置了这样的网址:http://mydomain/views/img/shared_uploads/IDCLIENT/它就无法工作。

感谢您的帮助。