首页 文章

拒绝通过htaccess直接访问文件夹和文件

提问于
浏览
125

这是场景:

  • 根文件夹中有一个 index.php 文件

  • index.php 中的某些文件包含在 includes 文件夹中 .

  • 1其他文件( submit.php )位于表单提交操作的根文件夹中 .

我想限制htaccess直接用户访问 includes 文件夹中的文件 . 也适用于 submit.php . 但是include将适用于 index.php 文件 . 例如,如果用户键入 www.domain.com/includes/somepage.php ,它将限制它(可能会重定向到错误页面) .

7 回答

  • 8

    我只是将 includes 文件夹移出web-root,但是如果你想阻止直接访问整个 includes 文件夹,你可以将 .htaccess 文件放在包含以下内容的文件夹中:

    deny from all
    

    这样你就无法打开该文件夹中的任何文件,但是你可以将它们包含在php中而不会出现任何问题 .

  • 6

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

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

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

  • 19

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

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

    1个基于mod_alias的衬里解决方案:

    RedirectMatch 403 ^/folder/file.php$
    

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

  • 13

    如果我理解正确你只想拒绝访问包含文件夹?

    带有'DENY FROM ALL'指令的.htaccess放在includes文件夹中就可以了 .

  • 256

    你的Q分为两部分,jeroen和anubhava 's solutions work for part I -- denying access to /includes. anubhava'也适用于第二部分 . 我更喜欢后者,因为无论如何我都使用 DOCROOT/.htaccess ,这将所有这些控制保存在一个文件中 .

    然而,我想要讨论的是“拒绝访问 submit.php ”的概念 . 如果您不想使用 submit.php 那么为什么要在DOCROOT中使用它?我怀疑这里的答案是你在某些形式中将它用作动作目标,并且只希望在提交表单时触发它而不是直接触发,例如来自一个spambot .

    如果这是真的那么你可以't use 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分钟的生命 .

  • 9

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

    Satisfy all
    Order deny,allow
    Deny from all
    

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

    Satisfy any
    

    由于用户已通过身份验证,这可以防止我拒绝全部生效 .

相关问题