![](/img/trans.png)
[英]need to use www.mydomain.com/filename/ instead of www.mydomain.com/file.php?id=1
[英]only allow PHP scripts to open urls like www.mydomain.com/topsecret/1/001.jpg
我运行一个Web应用程序,将用户上传的文件存储在以下文件夹结构中:
www.mydomain.com/uploads/topsecret/1/001.jpg
www.mydomain.com/uploads/topsecret/1/002.jpg
现在,很容易猜到003.jpg和004.jpg的网址......
因此,我想限制用户只能访问www.mydomain.com/app/,而不是其他任何内容。 只允许我在localhost上的.php页面获取最高机密的pdf,比如
show.php:
<? if ($isAdmin) {
echo "<img src='http://www.mydomain.com/uploads/topsecret/1/001.jpg'/>";
} ?>
也许通过.htaccess或通过文件夹权限有一个解决方案。 我知道我可以通过“headers”和“readfile”修复问题,但这会导致现在进行一些重构。
先谢谢你,马蒂亚斯
这可能是您正在寻找的:
将包含此文件的.htaccess文件放在您不希望用户能够访问的文件夹的根目录中:
order deny,allow
allow from 127.0.0.1
deny from all
这仍然允许从Web服务器上的Web浏览器访问URL,但尝试从任何其他计算机访问它们将导致403错误。
一些澄清:当你做一个
echo "<img src='....'>";
PHP访问无关紧要(事实上,即使PHP无法访问该文件,它也能正常工作!)。 第一步是要意识到,它是浏览器发出图像请求。 因此,如果浏览器可以访问它,则用户可以通过猜测图像的名称来访问其他图像。 如果您使用PHP的readfile提供图像,这甚至可以工作。 这就是为什么我写道你试图以错误的方式解决问题。
你可以做的是模糊图像名称(或发送到PHP脚本的请求变量)。 例如:使用盐+ MD5。 这样用户无法猜出名字。
在.htaccess中使用:
<FilesMatch "\.(engine|inc|jpg|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
Order allow,deny
</FilesMatch>
这将保护文件免受直接访问,然后例如设置默认的index.php文件来处理$ _GET请求:
RewriteBase /
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
您可以嵌入在base64中编码的图像,如下所示:
<img src="data:image/gif;base64,R0lGODlhUAAPAKIAAAsLav///88PD9WqsYmApmZmZtZfYmdakyH5BAQUAP8ALAAAAABQAA8AAAPb
WLrc/jDKSVe4OOvNu/9gqARDSRBHegyGMahqO4R0bQcjIQ8E4BMCQc930JluyGRmdAAcdiigMLVr
ApTYWy5FKM1IQe+Mp+L4rphz+qIOBAUYeCY4p2tGrJZeH9y79mZsawFoaIRxF3JyiYxuHiMGb5KT
kpFvZj4ZbYeCiXaOiKBwnxh4fnt9e3ktgZyHhrChinONs3cFAShFF2JhvCZlG5uchYNun5eedRxM
AF15XEFRXgZWWdciuM8GCmdSQ84lLQfY5R14wDB5Lyon4ubwS7jx9NcV9/j5+g4JADs=
" alt="British Blog Directory" width="80" height="15" />
你希望用<? if ($isAdmin) ...
<? if ($isAdmin) ...
- 如果用户是管理员,用户仍然可以看到这段代码 - >他也可以猜到其他文件名...
这是一个链接: http : //www.sweeting.org/mark/blog/2005/07/12/base64-encoded-images-embedded-in-html
在脚本中使用readfile()以向用户显示允许的图像。 并通过.htaccess / chmoded正确阻止对实际文件的访问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.