已解决:所有.Net Core项目页面上的Internet Explorer重定向

问题描述 投票:1回答:2

我是.Net Core的初学者,正在寻找一种解决方案来保护应用程序免受IE攻击。

我在控制器中使用了以下代码:

string userAgent = Request.Headers["User-Agent"].ToString();
var flagsIE = new [] {"MSIE", "Trident"};

if(flagsIE.Any(userAgent.Contains)){
    return RedirectToAction("BadBrowser");
}

现在,如果有人尝试使用IE访问该页面,他们将被重定向到一个信息页面,要求他们使用现代的浏览器。与其将代码添加到每个Controller.cs中,我不希望在项目级别上添加它,以便使其独立于项目中的位置而执行。

而且,我知道可以通过_Layout.cshtml实现,我的问题是:我将在何处以及如何实现一个函数,以使其随项目一起在所有请求的视图中执行,而无需在Controller中添加每个请求。

谢谢你。

UPDATE:正如Icepickle在评论中建议的那样,我在Startup.cs中使用了中间件并获得了预期的结果:

        app.Use(async (context,next) =>
            {
                string userAgent = context.Request.Headers["User-Agent"].ToString();
                var IEkeywords = new [] {"MSIE", "Trident"};

                if (IEkeywords.Any(userAgent.Contains)){
                    context.Response.Redirect("/IE/redirect/badbrowser.html");
                    return;
                }

                await next();
            });
c# asp.net-core-mvc
2个回答
4
投票

永远不要那样做。排除具有重定向的浏览器是导致大量用户代理欺骗的原因。有效地使该AgentId无用。而且按照您编写它的方式,您可能会得到很多假阳性。

从互联网的早期开始也是一个坏主意,我们希望摆脱它:https://en.wikipedia.org/wiki/User_agent#User_agent_spoofing


0
投票

您可以尝试在_Layout.cshtml中添加js以检测浏览器为IE:

 <script>
        var isIE = false || !!document.documentMode;
        if (isIE) {
            window.location.href = "/Home/ForbidInfo";
        }

    </script>

然后在Home控制器下创建一个名为ForbidInfo的视图,该视图向用户显示他无法使用IE显示视图的消息。

((注意:此视图的布局必须为null,否则它将进入无穷循环)]

@{
    ViewData["Title"] = "ForbidInfo";
    Layout = null;
}

<h1>Please use a modern browser!</h1>

这些设置之后,当您在IE中运行视图时,它将被重定向到FordidInfo页面。

如果您的页面不使用_layout,则需要在相应的视图上分别添加js,以确保它不会在IE中显示。

© www.soinside.com 2019 - 2024. All rights reserved.