拒绝htaccess对文件夹和文件的直接访问


133

这是方案:

  • index.php根文件夹中有一个文件
  • 一些文件包含在index.php其中是在includes文件夹中。
  • submit.php根文件夹中还有1个其他文件()用于表单提交操作。

我想includes通过htaccess 限制直接用户访问文件夹中的文件。也为submit.php。但是include将适用于index.php文件。就像,如果用户键入www.domain.com/includes/somepage.php,它将对其进行限制(可以重定向到错误页面)。

Answers:


266

我只是将includes文件夹移出了Web根目录,但如果要阻止直接访问整个includes文件夹,则可以.htaccess在该文件夹中放置一个文件,该文件仅包含:

deny from all

这样,您无法从该文件夹打开任何文件,但可以将它们包含在php中而没有任何问题。


7
其他文件是否可以对该文件夹中存在的文件发出Ajax请求?
Chaitanya Chandurkar

16
@ChaitanyaChandurkar不,ajax请求是正常的http请求,因此将被拒绝。
jeroen

Sr b / c我是新的网络编程。如何添加访问文件index.php的例外?
PhatHV

我拒绝所有人使用,它限制了每个网址。甚至不显示登录页面。::
Aamir

@Aamir是正确的,该文件夹中的URL将不可访问,但是您可以将它们包含在其他文件中而没有任何问题。
jeroen

56

这是mod_rewrite基于纯的解决方案:

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

如果URI包含/includes/或,这将显示禁止使用的错误/submit.php


3
解决提交文件的好工作
CTS_AE 2014年

29

可以使用Files指令并禁止访问所有文件,然后再次使用它来设置可访问的文件:

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>

6
我不确定发布问题是否能解决问题的人,但这是SO的美,多重答案可以帮助很多成员。最后一个答案解决了我的问题。我想让网站获取css文件,但无法访问ttf或otf字体,并且繁荣起来!解决。
Moxet Khan

在此之后,我将无法访问子文件夹中的文件
Gintare Statkute

14

1个基于线性mod_alias的解决方案:

RedirectMatch 403 ^/folder/file.php$

这将显示/folder/file.php的禁止错误


1
+1-这实际上非常好,因为如果您使用regex 将404应用于整个文件夹,那么甚至没人可以看到存在哪些文件^folder
bytecode77

9

如果我理解正确,您只是想拒绝对包含文件夹的访问?

在includes文件夹中放置带有'DENY FROM ALL'指令的.htaccess可以解决问题。


8

您的Q分为两个部分,jeroen和anubhava的解决方案都适用于第一部分-拒绝访问/ includes。阿努巴瓦的作品也适用于第二部分。我更喜欢后者,因为DOCROOT/.htaccess无论如何我都会使用它,并将所有这样的控件都保存在一个文件中。

但是,我不想讨论的是“拒绝访问submit.php” 的概念。如果您不想使用,submit.php那为什么还要在DOCROOT中使用它呢?我怀疑这里的答案是,您以某些形式将其用作操作目标,并且只希望在提交表单时而不是直接(例如从垃圾邮件程序中)将其触发。

如果这是真的,那么您将无法使用anubhava的第二部分,因为这会导致您的表单失败。您可以在此处执行(i).htaccess检查,以确保引荐来源网址是您自己的索引页:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

并且(ii)在PHP index.php表单生成器中包括一些用于时间戳和验证的隐藏字段。验证可以是时间戳的MD5的前10个字符和一些内部秘密。在处理提交时,您可以(i)验证时间戳和验证是否匹配,以及(ii)时间戳在当前时间的15分钟以内。

这可以防止垃圾邮件,因为垃圾邮件发送者可以获得有效的时间戳记/验证对的唯一实用方法是解析表单,但是这种抓取只有15分钟的寿命。


6

根据更高级别上可能设置的其他选项,您可能需要将以下内容放入包含目录中的.htaccess文件:

Satisfy all
Order deny,allow
Deny from all

当上层目录定义包括行的基本身份验证时,我遇到了这个问题:

Satisfy any

因为用户已通过身份验证,所以这阻止了我全部拒绝生效。


1

您可以将以下命令添加到.htaccess文件

Deny from all
ErrorDocument 403 "nothing is here"

在未经授权的访问的情况下,它将显示“此处无内容”消息。

如果要通过错误代码重定向到特定页面,则可以定义如下命令:

ErrorDocument 404 "/errors/404.html"

它将重定向到,/errors/404.html并显示未找到自定义页面的屏幕。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.