我想拒绝直接访问我的根应用程序中的某些敏感文件(例如:log,sh,ini...等)。出于这个原因,我在主.htaccess 中使用了以下指令:
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak|md|txt|lock|phar|bat)$|action.bat|composer.json|VERSION.*">
Require all denied
</FilesMatch>
奇怪的是,它可以完美地处理 FileMatch 中列出的所有文件,除了带有 (.bat) 扩展名的文件,我还不明白为什么它们仍然可以通过直接 URL 访问下载。 配置:
- 操作系统:Windows 10
- 堆栈:XAMPP
XAMPP 组件版本:
- Apache 2.4.39
- MariaDB 10.1.38
- PHP 7.3.4(VC15 X86 64 位线程安全)+ PEAR
- phpMyAdmin 4.8.5
- OpenSSL 1.1.0g
- XAMPP 控制面板版本 3.2.3。
更新:
实际上,我发现模式匹配适用于除名称为“action”的文件之外的所有“.bat”文件!如果我将名称更改为其他任何名称(比如说“action1”),它就可以正常工作。
答案1
您使用的正则表达式应该可以工作。您还应该能够删除,action.bat|
并且它应该具有相同的功能。如果您的文件不是以 结尾.bat
,则可能会导致问题。
对其功能的简单解释:
\.(htaccess|htpasswd|ini|log|sh|inc|bak|md|txt|lock|phar|bat)$
||| |
||^Any string within brackets (separated with | as "or") |
|^Any character or . when escaped End of filename marker ^
^Escape character
尝试重新启动您的服务器,确保您在正确的目录中工作,并确保没有任何其他内容违反您在此 .htaccess 中建立的规则。
答案2
您可以将以下内容添加到 vhost 文件中
拒绝特定文件访问
<Files *.bat>
Order allow,deny
Deny from all
</Files>
您可以根据您的要求添加扩展类型。