htaccess可以阻止对不需要的文件的所有访问吗?

时间:2014-01-05 15:40:31

标签: .htaccess security

我正在构建一些我想要作为开源项目发布的东西。为了更容易使用,我希望不使用公共文件夹方法,您可以隐藏index.php之外的所有其他文件(和public_html(和资产)。这意味着,我想像WordPress一样,只需将代码丢弃在服务器上就行了,它就可以在你输入的URL中输入。

以下是我的htaccess文件的内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

此代码是否真的阻止访问其他文件?例如,攻击者是否可以访问vendor/Acme/Libraries/Foo.php?根据我的测试,但这并不意味着没有办法绕过它。

2 个答案:

答案 0 :(得分:2)

让我们仔细看看你的规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

此规则说明如果请求不是有效文件,则将其重写为/index.php。这意味着将为任何非文件请求调用/index.php,但这也意味着您允许直接访问所有文件。

btw QSA在这里没用,可以删除。

你在这里引用了Wordpress。对于任何非文件非目录请求,它基本上使用/index.php,因此允许直接访问任何有效文件或目录

如果你真的想阻止访问所有文件和目录,那么你可能需要这个规则:

RewriteRule ^ index.php [L]

但我不确定您是否也希望通过index.php直接访问图片,js / css文件等资源。

答案 1 :(得分:0)

是的,攻击者仍然可以使用您提供的规则访问其他代码文件。但是:

  1. 在正确配置的服务器上,对vendor/Acme/Libraries/Foo.php的调用将执行该文件,而不显示其内容。可能会或可能不够好,并且仍有可能出现显示源代码的配置错误。

  2. 您可以通过添加Deny指令来阻止对其余文件的Web访问,例如:

    <Location />
      Order deny,allow
      Deny from all
      <Files index.php>
        Allow from all
      </Files>
    </Location>