【发布时间】:2014-09-03 04:56:45
【问题描述】:
今天我已经为此苦苦挣扎了一段时间。 我想要完成的是我需要阻止所有用户访问某些 php 文件和图像以及更多内容(它们位于单独的文件夹中)。
我正在使用 WAMP 服务器。
我不希望用户只能访问那个站点,例如“www/images/crazy-cat-picture.jpg”(或者更像是“www/phpScripts/sign-up-user.php” ) 但我仍然希望用户能够在我的网站上看到图片并调用 php 脚本。
我尝试了 3 种不同的方法,但都没有奏效。
1:将文件夹放在www目录之外
这不起作用,因为 php 和 html 页面找不到数据,它根本不会显示它。
2: .htaccess 文件,我在其中写了这个:
Deny from all
Allow from 127.0.0.1
Allow from 192.168
这不起作用,因为它完全阻止了访问,并且用户即使在单独的网站上也无法查看内容。
3: .htaccess 文件,我在其中写了这个:
IndexIgnore *
这将删除标准,而不是显示文件夹,而是将用户放置到 index.php,然后我将此文件重定向到错误 403 页面,这很好用。 但这里的问题是,如果用户拥有完整的路径,仍然可以访问数据,例如“www/images/crazy-cat-picture.jpg”
然后我一直在考虑在我所有的 php 脚本文件和用户上传的图片上创建复杂的名称,这将很难找到图片和文件。但我想知道是否没有更好的方法来做到这一点,例如如果用户没有从我的网站调用它,则阻止特定文件夹中的所有内容。
问题是:有人知道我怎样才能使在文件夹中找不到内容,但仍使用户能够在我的网站上使用它吗?
很抱歉把这篇文章写得这么长,但我希望有人可以回答我的问题。 谢谢!
【问题讨论】:
-
对于 php 文件,您可以在每个文件夹中创建空的 index.html 文件。但是对于图像,您不能做任何事情,因为您网站中可用的所有图像都是由客户端下载的。
-
有几种方法,最简单的方法是检查引荐来源网址是否设置,但有些用户将浏览器设置为不填充引荐来源网址。另一种是使用 php 加载文件,然后您可以在加载图像的页面上设置 CSRF 令牌之类的操作,另一种方法是使用 cookie 等,但最终 这一切都是徒劳的 因为如果有人想要它,那么除了您没有真正公开首先显示图像之外,没有什么能阻止他们。它对于任何资源、图像、视频、音乐都是一样的,否则浏览器将无法下载并显示它。祝你好运
-
您是要保护文件夹还是某些文件?
-
@user3810556 检查我的答案,让我知道它是否适合你,因为我不确定 Apache 如何在 Windows 上运行 :)
-
@LozCheroneツ 感谢大家的回答,现在我知道如果您能够通过网站访问这些文件,您必须能够单独访问这些文件。我想我不需要保护它们免受单独访问它们的用户的影响,因为每个人都可以从网站访问它们,那么我只需将限制编码到文件中,并且图像总是可以以某种方式访问,如果它们被加载到您的网站中。感谢您的快速回答:)