IIS 不获取隐藏文件

IIS 不获取隐藏文件

我在 Windows Server 2019 上使用 IIS v10.0.17763.1。几个月前,我能够获取具有隐藏属性的文件。现在这个方法不再起作用,返回 404.9 请求该文件上的 PROPFIND 非常有效。

测试文件本身是一个简单的 test.txt,内容为Hello world

日志文件不包含任何有用的信息: 2021-01-22 10:00:07 10.0.20.4 GET /foobar/Configurator/test.txt - 80 foobar\administrator 10.0.20.4 PostmanRuntime/7.15.2 - 404 9 2 1

假设某种 Windows 更新破坏了这种行为,因为 IIS 的配置没有任何变化,并且可以在其他未对 IIS 进行任何更改的(已更新)系统上重现。

PS C:\Users\Administrator.QA> Get-WebConfigurationProperty -PSPath "MACHINE/WEBROOT/APPHOST" -Filter "system.webServer/webdav/authoring/fileSystem" -Location "Default Web Site" -Name "allowHiddenFiles"
ItemXPath                   : /system.webServer/webdav/authoring/fileSystem
IsInheritedFromDefaultValue : False
IsProtected                 : False
Name                        : allowHiddenFiles
TypeName                    : System.Boolean
Schema                      : Microsoft.IIs.PowerShell.Framework.ConfigurationAttributeSchema
Value                       : True
IsExtended                  : False

PS C:\Users\Administrator.QA> Get-WebConfigurationProperty -PSPath "IIS:\sites\Default Web Site/foobar" -Filter /system.webServer/security/requestFiltering/fileExtensions -Name applyToWebDAV
ItemXPath                   : /system.webServer/security/requestFiltering/fileExtensions
IsInheritedFromDefaultValue : False
IsProtected                 : False
Name                        : applyToWebDAV
TypeName                    : System.Boolean
Schema                      : Microsoft.IIs.PowerShell.Framework.ConfigurationAttributeSchema
Value                       : False
IsExtended                  : False

PS C:\Users\Administrator.QA> Get-WebConfigurationProperty -PSPath "MACHINE/WEBROOT/APPHOST" -Location "Default Web Site/foobar" -Filter /system.webServer/security/requestFiltering/hiddenSegments -Name applyToWebDAV
ItemXPath                   : /system.webServer/security/requestFiltering/hiddenSegments
IsInheritedFromDefaultValue : False
IsProtected                 : False
Name                        : applyToWebDAV
TypeName                    : System.Boolean
Schema                      : Microsoft.IIs.PowerShell.Framework.ConfigurationAttributeSchema
Value                       : False
IsExtended                  : False

有什么建议可以解决这个问题吗?或者哪个 Windows 更新可能破坏了它?

我发现了这个:https://docs.microsoft.com/en-us/troubleshoot/iis/hidden-static-files-http-404-access-denied但我不明白这有什么帮助。

更新

在与 Microsoft 支持人员进行一些咨询后,我有两个选择:

  • 删除隐藏属性或
  • 编写我自己的静态文件处理程序

我得到了关于如何做后者的提示:

静态文件处理程序的当前代码可以在以下位置找到:https://referencesource.microsoft.com/#system.web/StaticFileHandler.cs引发异常的代码是:

// To be consistent with IIS, we won't serve out hidden files
if ((((int)fileInfo.Attributes) & ((int)FileAttributes.Hidden)) != 0) {
  throw new HttpException(HttpStatus.NotFound, SR.GetString(SR.File_is_hidden));
}

关于如何创建自定义处理程序的文章可以在https://docs.microsoft.com/en-us/iis/develop/runtime-extensibility/developing-iis-modules-and-handlers-with-the-net-framework

答案1

IIS 不会提供具有隐藏属性的静态文件,从来都不会。IIS 或 Windows 中没有变化。

只需删除文件的属性即可。

任何具有隐藏属性的动态文件仍会提供给客户端,因为它们通过不同的文件处理程序运行。

相关内容