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

6

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

example.com/inc/

我已经创建了一个example.com/inc/.htaccess文件,其内容如下:

Order deny,allow
Deny from all

当我尝试访问其中一个文件时,会出现403禁止响应。例如:example.com/inc/file.php

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

我如何拒绝访问浏览此类PHP文件的人,但允许共享Web服务器访问?

注意:我正在使用GoDaddy共享主机。


1
你的网页服务器为什么会“被拒绝访问”?这是一个Apache指令。除非你通过http包含其他脚本文件,否则这不应该成为问题。PHP在文件系统上工作,这意味着它忽略Apache指令/规则。另一个选项(通常更好的选项)是将你不想允许访问的目录移动到Web根目录之外。然后,PHP就无法从该目录运行,但其他脚本可以访问该目录中的文件进行包含等操作。 - Jonathan Kuhn
有人试图访问 file.php 和你的 Web 服务器访问 file.php 是没有区别的。HTTP_REFERER 可能被使用,但这只是一个非常弱的检查方式。 - anubhava
可能重复:https://dev59.com/MXRC5IYBdhLWcg3wG9Nb - vard
@anubhava 你的 Web 服务器是否有必要通过 Apache 通过 http 访问 Web 服务器上的另一个文件? - Jonathan Kuhn
Web服务器需要访问实际上是一个令人困惑的术语,因为对file.php的每次访问都是通过网站的Web服务器进行的。可能OP的意思是网站上有一些链接指向file.php - anubhava
我不确定我的Web服务器是否被“拒绝”访问,但当我尝试这个问题答案中提到的任何解决方案时,我在整个站点上都会收到403 Forbidden的错误。有什么想法吗? - henrywright
4个回答

7
我建议使用规则来阻止用户输入的访问,这将会阻止任何输入的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禁止访问的错误。有什么想法是为什么吗? - henrywright
@henrywright 是的,所有服务器都是如此。与您的域名指向的相同。您还可以使用主机名。allow from yoursite.com http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html - Panama Jack
当您查看网页时,客户端(浏览器)将加载JavaScript。然后,当它进行Ajax调用时,它会作为用户发出请求。这就是用户的IP地址。如果您阻止访问该文件,则您的Ajax将无法工作。您必须在file.php内部进行错误处理和安全性。 - Panama Jack
好的!谢谢您的解释,我现在完全理解了。您建议我如何在file.php内部添加安全性?或许这需要另一个问题吗? - henrywright
1
@henrywright 我建议你在另一个问题中提出这个问题。这个问题已经按照你的要求得到了回答,但是因为我们在问题中没有得到有关它是ajax的所有信息,所以我只是按原样回答了它。"拒绝所有php文件"。在下一个问题中,请提供一些你的php代码,并让我们知道你想要防止发生什么。 - Panama Jack
显示剩余9条评论

2

请使用正确的目录结构,将您的文件放到 lib/ 目录中,并从不在此目录中的文件中包含它们。这就是常见框架的工作方式。

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

您可以阅读 Symfony2 的解决方案,例如 http://symfony.com/doc/current/quick_tour/the_architecture.html,它会给您一些提示。


file.php被一个ajax调用使用,因此我无法将它放在我的Web根目录之外。虽然谢谢你提供的链接,很有趣可以看到Symphony如何组织文件结构。 - henrywright
无论您是否具有适当的MVC结构,都可以更深入地阅读web/目录相关的编程内容 :) - Robert

1
要阻止访问所有以.php结尾的文件,您可以使用以下代码:
RedirectMatch 403 ^.*\.php$

1
当我这样做时,整个网站都会出现403禁止访问的错误。 - henrywright

1

如果你只想拒绝访问PHP文件,可以使用以下方法:

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

当我这样做时,整个网站都会出现403禁止访问的错误(与Panama Jack的解决方案相同)。有什么想法吗? - henrywright
1
大多数情况下,您已经将其放置在顶级文件夹的htaccess中。请将其放置在要保护的文件夹的.htaccess中。 - Azghanvi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接