我正在构建一些我想要作为开源项目发布的东西。为了更容易使用,我希望不使用公共文件夹方法,您可以隐藏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
?根据我的测试,但这并不意味着没有办法绕过它。
答案 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)
是的,攻击者仍然可以使用您提供的规则访问其他代码文件。但是:
在正确配置的服务器上,对vendor/Acme/Libraries/Foo.php
的调用将执行该文件,而不显示其内容。可能会或可能不够好,并且仍有可能出现显示源代码的配置错误。
您可以通过添加Deny
指令来阻止对其余文件的Web访问,例如:
<Location />
Order deny,allow
Deny from all
<Files index.php>
Allow from all
</Files>
</Location>