让IIS对不允许的动词返回405



一个PEN测试发现一个OPTIONS谓词从我的ASP. net . net返回数据。. NET 4/MVC 5)服务器。基于一些资源,在网上。我已将IIS配置为使用

阻止此谓词。
<system.webServer>
<security>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="false"/>
</verbs>
</requestFiltering>
</security>
</system.webServer>

这"works"但响应404(未找到)。进行PEN测试的安全团队表示,这还不够。(我的客户雇佣了这个团队,他非常希望我符合他们的要求)。

这也不是我期望和想要的:就像这里所说的"请求方法是服务器知道的,但已被禁用,不能使用",因此它应该返回一个405(方法不允许)。

然而,正如这里所描述的,当前的响应是由设计的:当IIS基于此特性拒绝请求时,记录的错误代码为404.6."。根据维基百科,他们称之为"否定动词"。

我不明白。为什么——在这种情况下——"405"的响应是合适的(甚至是标准化的?)这里没有给出?更重要的是:如何让IIS对不允许的动词/请求方法使用405响应?

我想出了一个使用一些自定义错误处理的解决方案。我的网络。配置现在有

<system.webServer>
<security>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="false"/>
</verbs>
</requestFiltering>
</security>
<httpErrors errorMode="Custom" existingResponse="Replace" >
<remove statusCode="404" subStatusCode="-1"/>
<error statusCode="404" subStatusCode="6"
path="/Error/MethodNotAllowed" responseMode="ExecuteURL"/>
<error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL"/>
[...etc]
</httpErrors>
</system.webServer>

我在errorcontroller。cs

中添加了一个方法
public class ErrorController : Controller
{
[...]
public ActionResult MethodNotAllowed()
{
return new HttpStatusCodeResult(HttpStatusCode.MethodNotAllowed);
}
}

这似乎"有效"。当我使用postmaster请求OPTIONS时,我得到405,当我得到一个不存在的页面时,我仍然得到我的自定义404页面。

最新更新