我的 IIS web-config 文件在尝试实现自定义错误处理和删除基本漏洞时出现 500 错误

My IIS web-config file gives 500 error while trying to implement custom error handling and removing basic vulnerabilities

提问人:Joe 提问时间:10/31/2023 更新时间:10/31/2023 访问量:60

问:

我正在尝试在我的 Web 服务中实现自定义错误页面处理,同时删除主机标头注入漏洞并避免泄露有关我的 Web 服务器的信息。对于上下文,我的应用程序结构如下所示:

  1. 索引:.html
  2. 服务1/页面/*.html
  3. 服务2/页面/*.html
  4. service3/pages/*.html,
    其中 service1、service2、service3 是三个独立的目录。

我当前显示的 Web 配置文件工作没有任何问题:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors errorMode="Custom" existingResponse="Replace">
            <remove statusCode="404" />
            <error statusCode="404" path="error.html" responseMode="File" />
        </httpErrors>
       <rewrite>
            <rules>
                <rule name="HTTPS Redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

但是,当我尝试将其更改为以下配置时,它会抛出内部服务器错误并停止工作。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <httpRuntime enableVersionHeader="false" />
        <httpCookies httpOnlyCookies="true" />
        <httpRuntime enableHeaderChecking="true" />
    </system.web>
    <system.webServer>
        <httpErrors errorMode="Custom" existingResponse="Replace">
            <remove statusCode="500" />
            <error statusCode="500" path="error.html" responseMode="File" />
            <remove statusCode="404" />
            <error statusCode="404" path="error.html" responseMode="File" />
            <remove statusCode="400" />
            <error statusCode="400" path="error.html" responseMode="File" />
        </httpErrors>
        <httpProtocol>
            <customHeaders>
                <remove name="X-Powered-By" />
                <remove name="Server" />
                <add name="X-Content-Type-Options" value="nosniff" />
                <add name="X-Frame-Options" value="SAMEORIGIN" />
                <add name="X-XSS-Protection" value="1; mode=block" />
                <add name="Content-Security-Policy" value="default-src 'self';" />
            </customHeaders>
        </httpProtocol>
       <rewrite>
            <rules>
                <rule name="HTTPS Redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

我知道问题出在system.webhttpProtocol标签的某个地方。但是,我无法识别它。删除这两个标签可以使其在一定程度上工作,即自定义错误页面有效,但前提是我尝试访问根路径中不存在的页面,例如 https://mwww.mydomain.com/non_existent_page.html。如果我尝试访问子文件夹中不存在的页面,例如 https://mwww.mydomain.com/service1/pages/non_existent_page.html,它不会加载 css 和 js 文件以及超链接。
我可以使用一些帮助来识别问题。

IIS web-config

评论

0赞 Lex Li 10/31/2023
1. 仅适用于 ASP.NET 4.x 应用程序,不适用于其他任何应用程序。2. 要删除服务器标头,您需要完全不同的东西,halfblood.pro/...system.web
0赞 Joe 11/1/2023
@LexLi,那么我如何在 Web 配置文件中做到这一点呢?
0赞 Lex Li 11/1/2023
当你说“这样做”时,你指的是什么?许多 IIS 设置设计为在注册表项中独占配置,因此,如果您只能访问 Web 应用中的文件,则无法解决所有风险。在这些情况下,请与服务器管理员联系。applicationHost.configweb.config
0赞 YurongDai 11/1/2023
修改前使用原始配置文件时,自定义错误页面是否不适用于子文件夹中不存在的访问页面?
0赞 Joe 11/14/2023
@YurongDai,不,它没有。我收到 500 错误。

答: 暂无答案