使用 .htaccess 拒绝访问目录中的所有 PHP 文件

Posted

技术标签:

【中文标题】使用 .htaccess 拒绝访问目录中的所有 PHP 文件【英文标题】:Deny access to all PHP files in a directory using .htaccess 【发布时间】:2015-07-30 05:07:37 【问题描述】:

我正在尝试拒绝任何在特定目录中浏览 php 文件的人的访问:

example.com/inc/

我创建了一个包含以下内容的 example.com/inc/.htaccess 文件:

Order deny,allow
Deny from all

当我尝试访问其中一个文件时,这会导致 403 Forbidden 响应。例如:example.com/inc/file.php

问题是,我的网络服务器也被拒绝访问,我的应用程序停止工作。

我怎样才能拒绝浏览此类 PHP 文件的人访问但允许我的共享网络服务器访问?

注意:我使用的是 GoDaddy 共享主机。

【问题讨论】:

您的网络服务器如何“也被拒绝访问”?那是一个apache指令。除非您通过 http 将文件包含到其他脚本中,否则这应该不是问题。 PHP 在文件系统上工作,这意味着它忽略 apache 指令/规则。另一种选择(通常是首选)是仅移动您不允许访问 Web 根目录之外的目录。然后 php 无法从该目录运行,但其他脚本可以访问包含文件等文件。 尝试访问file.php 的人和您的Web 服务器访问file.php 之间没有区别。 HTTP_REFERER 可能可以使用,但这是一个非常弱的检查。 可能重复:***.com/questions/409496/… @anubhava 您的网络服务器是否需要通过 apache 通过 http 访问网络服务器上的另一个文件? Web 服务器需要访问实际上是一个令人困惑的术语,因为对file.php 的每次访问都只能通过站点的网络服务器。可能OP意味着网站上有一些指向file.php的链接。 【参考方案1】:

要阻止对所有以.php 结尾的文件的导航访问,您可以使用:

RedirectMatch 403 ^.*\.php$

【讨论】:

当我这样做时,我的网站上出现 403 Forbidden。【参考方案2】:

要仅拒绝访问 php 文件,您可以使用以下命令:

<Files *.php>
order allow,deny
deny from all
</Files>

【讨论】:

当我这样做时,我的网站上出现 403 Forbidden(与 Panama Jack 的解决方案相同)。任何想法为什么? 最喜欢你放在***文件夹的 htaccess 中。将其放在您要保护的文件夹的 .htaccess 中。【参考方案3】:

我会使用规则并阻止用户输入的访问。这将阻止任何输入的 php 文件。

RewriteEngine On
RewriteRule ^.*\.php$ - [F,L,NC]

根据您的评论进行编辑。试试这个方法。

<Files (file|class)\.php>
order allow,deny
deny from all
allow from 127.0.0.1
allow from 192.168.0.1
</Files>

将 192.168.0.1 替换为您的服务器 IP 地址。

【讨论】:

当我这样做时,我会在我的网站上收到 403 Forbidden。任何想法为什么? 好的,我想每个人都对您要完成的工作感到困惑。您说您想阻止对 .php 文件的访问。这样做。但是,如果您的页面是使用 PHP 呈现的,那么如果他们的用户必须导航到 php 页面才能看到您的网站,您就无法阻止它们。 是的,我明白了,但 file.php 只有 4 行代码。它处理我正在进行的 ajax 调用并回显对我的 javascript 的响应。 在 /inc/ 里面我还有一个 PHP 文件。就这样。第二个文件名为 class.php,包含一个类定义。 @henrywright 我会在另一个问题中问这个问题。出于所有密集目的,已按照您的要求回答了这个问题,但是因为我们没有关于它是 ajax 的问题中的所有信息,所以我只是按原样回答了它。 Deny all php files。在下一个问题中提供您的一些 php 代码,并让我们知道您要防止发生什么。【参考方案4】:

使用正确的目录结构,例如将您的文件放到 lib/ 目录中,并从该目录中不存在的文件中包含它们。这就是通用框架的工作原理。

您甚至可以将您的 url 映射到 web/ 目录并将 lib 放在一个目录上,这样您就可以确定无法访问您的 .php 文件,而只能访问 index.php 和 assets。

你可以阅读它是如何解决的,例如 Symfony2 http://symfony.com/doc/current/quick_tour/the_architecture.html 它会给你一些线索。

【讨论】:

file.php 由 ajax 调用使用,因此我不能将它放在我的 web 根目录之外。不过感谢您提供的链接,看看 Symphony 如何组织文件结构很有趣。 如果你有正确的 MVC 结构并不重要 阅读更深入:) 与 web/ 目录

以上是关于使用 .htaccess 拒绝访问目录中的所有 PHP 文件的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 拒绝目录访问

.htaccess 拒绝所有-> 目录索引不起作用(拒绝所有和白名单文件)

拒绝使用 htaccess 直接访问文件

htaccess <Directory> 拒绝所有

使用 htaccess 拒绝访问除少数文件夹外的所有文件夹

.htaccess 拒绝所有人