阻止对目录的外部访问,但允许 SSI 访问(或者,“FilesMatch”指令实际上如何工作?)

2024-03-16

在我使用 PHP 的旧网站上,我有一个.htaccess在目录中/noaccess如下:

# /noaccess/.htaccess
<FilesMatch "^.*$">
order allow,deny
deny from all
</FilesMatch> 

我有一个 PHP 文件,例如

<html>
<body>
<?php include('noaccess/blah.ssi'); ?>
</body>
</html>

这工作正常,内容blah.ssi是可见的。

但是,在我当前的站点上,我正在使用 SSI 和以下内容:

<html>
<body>
<!--#include virtual="noaccess/blah.ssi" -->
</body>
</html>

不起作用。日志显示unable to include "noaccess/blah.ssi"。去除FilesMatch指令并且有效。所以我显然误解了该命令的工作原理,我没有意识到它会阻止 Apache 本身。那么如何阻止来自 Web 的访问但允许 SSI 访问呢? (我认为我可以(并且应该)存储我不想在外部访问的内容public_html但这似乎在 SSI 包含中不起作用 - 但无论如何,即使它起作用,我也有兴趣知道如何做到这一点)。

谢谢,T。


据我的经验所知,mod_include 遵循客户端的限制,因此您无法使用 apache 指令执行您想要的操作。

如果您想隐藏包含的文件,您可以使用以下命令禁用目录索引Options -Indexes对你的指令.htaccess文件,不过。另外,您可以以难以猜测的方式命名包含的文件。

我更喜欢的选择是使用 uuid,您可以使用以下命令生成它们在线工具 http://www.uuidgenerator.com/或在您的工作站上安装一些实用程序:

itorres@localhost$ uuid
6e8feb48-1a3b-11e0-a0e3-00505624a126
itorres@localhost$ vi noaccess/6e8feb48-1a3b-11e0-a0e3-00505624a126.ssi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止对目录的外部访问,但允许 SSI 访问(或者,“FilesMatch”指令实际上如何工作?) 的相关文章