一次笔试发现,选项动词从我的(ASP.NET 4/MVC 5)服务器返回数据。基于多个源,在web.config中,我已经将IIS配置为使用以下方法阻止这个谓词
<system.webServer>
<security>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="false"/>
</verbs>
</requestFiltering>
</security>
</system.webServer>这“工作”,但回复404 (找不到)。做笔试的安全小组说这还不够。(我的客户,谁雇用了团队,真的希望我符合他们的要求)。
这也不是我所期望和想要的:就像所说的这里一样,“请求方法是服务器已知的,但是已经被禁用,不能使用”,因此它应该返回一个405 (不允许的方法)。
但是,正如描述的这里一样,当前的响应是通过设计的:“当IIS拒绝基于此特性的请求时,记录的错误代码为404.6”。根据维基百科他们称它为“动词拒绝”。
我不明白这个。为什么-in这种情况适合(甚至标准化?)-这里没有给出"405“的响应?更重要的是:如何让IIS在不允许的动词/请求方法上使用405响应?
发布于 2021-02-20 14:59:31
我想出了一个解决办法,使用一些自定义错误处理。我的web.config现在
<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);
}
}这似乎是“可行的”。当我使用邮局管理员请求一个选项时,我得到405个,当我得到一个不存在的页面时,我仍然得到我的自定义404页面。
https://stackoverflow.com/questions/66284568
复制相似问题