IIS 阻止虚假 API

IIS 阻止虚假 API

在 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 之外不要显示任何其他内容。

相关内容