HTTP OPTIONS方法如何确定IIS 8.5中允许的方法?


8

我正在寻找TRACE从IIS 8.5(Windows Server 2012 R2 Datacenter)网站中删除该方法的方法。我已经使用请求过滤实现了如下:

<system.webServer>
  <security>
    <requestFiltering>
      <verbs allowUnlisted="true">
        <add verb="TRACE" allowed="false" />
      </verbs>
    </requestFiltering>
  </security>
</system.webServer>

这样可以阻止TRACE请求,但是如果我发送OPTIONS请求,它仍会TRACEAllowPublic标头中列出。我已重设IIS,但无法TRACE退出OPTIONS。我不想否认OPTIONS

这是有问题的,因为似乎我们遵守的合规性扫描使用OPTIONSTRACE已启用的指示符。我知道这是不正确的,但这是我必须满足的标准。

有什么方法可以让OPTIONS正确报告可用方法?

Answers:


6

有趣的问题。response headers从IIS 删除的所有方法似乎不适用于AllowPublic标头,OPTIONS请求始终返回:

Allow:  OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST

无论服务器实际允许什么。

IIS中的所有请求都由模块处理,OPTIONS请求由来处理,ProtocolSupportModule这不是必需的,而且看起来很愚蠢。

如果我们删除该模块,则服务器不再响应您仍然希望支持的“选项”请求,因此我们必须使用另一个模块来回答这些问题。

打开:

%SystemRoot%\System32\inetsrv\config\applicationHost.config

并搜索OPTIONSVerbHandler该行的注释,同时在该行上面的(TRACEVerbHandler)也是如此。现在添加一个新节点:

<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />

整个块应如下所示:

    <!--  <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" /> 
          <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> -->
          <add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" /> 

现在,staticFileModule将处理OPTIONS请求,但不会返回任何内容。

如果现在OPTIONS向服务器发出请求,则不会获得Allow也不提供Public标头,可以在web.config中轻松添加它们

<system.webServer>
 <httpProtocol>
      <customHeaders>
          <add name="Allow"  value="GET,POST,HEAD" />  
          <add name="Public" value="GET,POST,HEAD" />
      </customHeaders>
  </httpProtocol>        
</system.webServer>

现在您的OPTIONS请求可以按要求工作,但是那些额外的标头也会与任何GETPOST我认为仍然有效的http请求一起发送。

如果只想将这些标头用于OPTIONS请求,则可以编写一个简单的http模块来设置这些标头并使用它,而不是上面使用的StaticFileModule。


感谢您的回答,我想知道是否需要更换OPTIONS处理程序,您的回答为我提供了处理此问题的途径。
alergy 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.