拒绝特定文件访问

拒绝特定文件访问

我想拒绝直接访问我的根应用程序中的某些敏感文件(例如: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>

您可以根据您的要求添加扩展类型。

相关内容