2012-08-12 23 views
2

通过研究,我发现了两种常用技术来阻止客户端直接访问库使用浏览器:如何让浏览器不在我的库中?他们应该放在哪里?

  1. 使用.htaccess,让他们出来
  2. 定义一个常量,并把它传递到包含文件,那么包含的文件检查如果常量存在。

但是,只是将这些文件放在文档根目录之外似乎是明智的。这种方法有什么问题吗?

回答

9

要做的最好的事情是保持它在你的docroot之外。没有理由将include包含在HTTP可直接访问的地方。

一些共享的网络主机配置不好,没有这个选项,但大多数都是这样做的,而且您绝对可以在您自己的服务器或VPS上选择此选项。

+0

这将使方法2不必要。 – Blake 2012-08-12 18:28:35

+1

完全没有任何性能问题。正如@Blake所说,'.htaccess'文件并不重要,因为服务器无论如何都无法访问该文件夹。 Web服务器不知道或关心PHP获取它的内容......这取决于PHP配置。 Web服务器只知道其文档根目录中的内容。 – Brad 2012-08-12 18:51:37

2

要完成布拉德的答案,这里是你如何组织你的文件夹:

/path/to/project/ 
    public_html/ 
    index.php 
    includes/ 
    includes.php 

你的Web服务器的根文件夹将public_html

如果您不能修改此结构,唯一可接受的方法是使用.htaccess(或等效项)来防止includes被公开访问。

0

如果您使用Apache Web服务器,则可以拒绝访问所有.inc.php文件。您只需将以下内容添加到Apache Vhost配置中:

<FilesMatch .inc.php> 
    Order allow, deny 
    deny from all 
</FilesMatch> 

您仍然可以将这些文件包含在您的php代码中。

0

如果库文件只是定义类/函数/任何内容,并且您的服务器未配置为可以查看源代码的方式,则无论如何都不会通过Web服务器请求脚本。话虽如此,如果你可以将它们存储在文档根目录之外。

+0

曾经被打破他们的PHP配置的主机咬伤?如果您的所有源代码和数据库密码被意外丢弃到网络中,这并不好玩。至少如果所有东西的大部分都不在Web根目录中,则损害会被最小化。 – Brad 2012-08-12 19:13:57

+0

@Brad这将是一个服务器配置的示例,它可以查看源代码,但无可否认,您将无法像开发人员那样预见或控制该源代码。是的,这将吸引。我赞同将文件存储在文档根目录之外。我的观点是,对于一个正确配置的服务器来说,只需要具有类定义代码的库文件就不会做任何事情,而对于这样的库文件,OP的技术#2将无法完成任何事情。 – JMM 2012-08-13 02:06:15