我在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目录中显示文件。
感谢。
答案 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/它就无法工作。
感谢您的帮助。