在 IIS 中,它可以阻止虚假 API 调用吗?昨天,我被一些试图查看某个页面是否在网站上的消息淹没了。他们得到了 404,但应用程序仍然必须检查该页面是否是应用程序中的好页面。IIS 可以阻止这种情况吗?还是 Web 应用程序需要处理它并阻止它。IIS 中是否有一个部分可以添加虚假路径来阻止这种情况?这会有所帮助吗https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/denyurlsequences/或者使用 IIS 重写的反向代理它只会传递设置的流量?
虚假 API 调用
The controller for path '/bitrix/admin/' was not found
The controller for path '/cgi-bin/webcm'
The controller for path '/admin' was not found
The controller for path '/system/login'
The controller for path '/typo3/phpmyadmin/'
应用程序日志文件
2021-08-17 15:05:28,382 [16] ERROR HTI.LogServices.Implementation.Log4NetHelper - [undefined]: Unhandled Exception (System.Web.HttpException (0x80004005): The controller for path '/admin' was not found or does not implement IController.
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
答案1
正如您提到的,IIS 的请求过滤应该能够帮助您。
您使用的是 asp.net MVC 网站,因此任何请求的 URL 都会根据所有配置的路由进行检查。这意味着您的应用程序层用于对请求做出 404 响应。
理想情况下,您希望在调用应用程序层之前,在请求管道中尽早出现 404。
有多种选择:
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence="/system/login" />
</denyUrlSequences>
<hiddenSegments>
<add segment="system" />
</hiddenSegments>
<filteringRules>
<filteringRule name="systemLogin" scanUrl="true" scanQueryString="false">
<denyStrings>
<add string="system/login" />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>
</security>
</system.webServer>
您应该尝试选择最适合您并且不会影响您自己的应用程序的方法。
如果启用失败请求跟踪,您可以看到 404 响应是在管道中的哪个位置创建的。在我不使用请求过滤的测试中,404 是在管道中的 232 位置创建的,而使用请求过滤时,404 是在 72 位置创建的,这要早得多,而且是在调用应用程序层之前。
是的,在您的 IIS 服务器前面设置一个 Web 防火墙会更好,但缺少了 IIS 可以在这些请求到达您的应用程序之前检测到它们。
确保您的自定义错误页面配置正确,并且除了 404 之外不要显示任何其他内容。