通过研究,我发现了两种常用技术来阻止客户端直接访问库使用浏览器:如何让浏览器不在我的库中?他们应该放在哪里?
- 使用
.htaccess
,让他们出来 - 定义一个常量,并把它传递到包含文件,那么包含的文件检查如果常量存在。
但是,只是将这些文件放在文档根目录之外似乎是明智的。这种方法有什么问题吗?
通过研究,我发现了两种常用技术来阻止客户端直接访问库使用浏览器:如何让浏览器不在我的库中?他们应该放在哪里?
.htaccess
,让他们出来但是,只是将这些文件放在文档根目录之外似乎是明智的。这种方法有什么问题吗?
要做的最好的事情是保持它在你的docroot之外。没有理由将include包含在HTTP可直接访问的地方。
一些共享的网络主机配置不好,没有这个选项,但大多数都是这样做的,而且您绝对可以在您自己的服务器或VPS上选择此选项。
要完成布拉德的答案,这里是你如何组织你的文件夹:
/path/to/project/
public_html/
index.php
includes/
includes.php
你的Web服务器的根文件夹将public_html
。
如果您不能修改此结构,唯一可接受的方法是使用.htaccess
(或等效项)来防止includes
被公开访问。
如果您使用Apache Web服务器,则可以拒绝访问所有.inc.php文件。您只需将以下内容添加到Apache Vhost配置中:
<FilesMatch .inc.php>
Order allow, deny
deny from all
</FilesMatch>
您仍然可以将这些文件包含在您的php代码中。
如果库文件只是定义类/函数/任何内容,并且您的服务器未配置为可以查看源代码的方式,则无论如何都不会通过Web服务器请求脚本。话虽如此,如果你可以将它们存储在文档根目录之外。
这将使方法2不必要。 – Blake 2012-08-12 18:28:35
完全没有任何性能问题。正如@Blake所说,'.htaccess'文件并不重要,因为服务器无论如何都无法访问该文件夹。 Web服务器不知道或关心PHP获取它的内容......这取决于PHP配置。 Web服务器只知道其文档根目录中的内容。 – Brad 2012-08-12 18:51:37