如何在 ASP.NET Core 中防范 XSS?

在 ASP.NET 中,我们有请求验证,但在 ASP.NET Core 中没有这样的东西。


我们如何才能以最佳方式保护 ASP.NET Core 应用免受 XSS 攻击?


请求验证消失了:https : //nvisium.com/resources/blog/2017/08/08/dude-wheres-my-request-validation.html - 这家伙推荐 RegExModels如下:


[RegularExpression(@"^[a-zA-Z0-9 -']*$", ErrorMessage = "Invalid characters detected")]

public string Name { get; set; }

...但这不适用于全球化/国际化,即非拉丁字符,如æ、ø å 汉字。


X-XSS 要做 >limited< XSS-protection:https : //dotnetcoretutorials.com/2017/01/10/set-x-xss-protection-asp-net-core/像这样,但只有有限的支持 afaik:


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

{

    app.Use(async (context, next) =>

    {

        context.Response.Headers.Add("X-Xss-Protection", "1");

        await next();

    });


    app.UseMvc();

}

Microsoft 的文档已有两年历史:https : //docs.microsoft.com/en-us/aspnet/core/security/cross-site-scripting?view=aspnetcore-2.1并没有真正涵盖它。


我正在考虑做一些简单的事情,例如:


myField = myField.Replace('<','').Replace('>','').Replace('&','').Repl...;

在所有数据提交上 - 但它似乎有点不稳定。

我向 Microsoft 提出了同样的问题,但我很想听听人们如何在现实生活中的应用程序中解决这个问题。


更新:我们正在努力完成的事情:


在我们的应用程序中,我们有网络表单,人们可以在其中输入姓名、电子邮件、内容等。数据存储在数据库中,并将在前端系统和未来可能的其他系统(如 RSS 提要、JSON 等)上查看。一些表单包含富文本编辑器(tinymce)并允许用户标记他们的文本。恶意用户可以<script>alert('evil stuff');</script>在字段中输入。在 ASP.NET Core 中的邪恶字符到达数据库之前去除它的最佳方法是什么 - 我更喜欢邪恶脚本根本不存储在数据库中。


我认为这样的事情可以工作:


const string RegExInvalidCharacters = @"[^&<>\""'/]*$";


[RegularExpression(RegExInvalidCharacters, ErrorMessage = "InvalidCharacters")]

public string Name { get; set; }


[RegularExpression(RegExInvalidCharacters, ErrorMessage = "InvalidCharacters")]

public string Content { get; set; }


...


四季花海
浏览 314回答 3
3回答

守着星空守着你

您可以在 ASP.NET Core 中使用HtmlSanitizer&nbsp;NuGet 包。

陪伴而非守候

防止存储/反射 XSS的最佳方法之一是对输出进行HTML 编码。您也可以在将其存储在数据库中之前对其进行编码。因为无论如何您都不需要这些字段的输出以 HTML 格式。使用正则表达式的解决方案并不总是有效。你在这里做的是你依赖一个黑名单。依赖白名单总是更好,更安全(在这种情况下你不需要)。或者如果可能的话,对输出进行 HTML 编码。

Cats萌萌

我知道这已经一岁了,但是为了您(和其他人)的参考,您可能想看看创建一个 ResourceFilter 或 Middleware 来清理传入的请求。您可以在那里使用您想要的任何工具或自定义代码,但关键是所有传入的请求都通过此过滤器以清除不良数据。确保为您的应用程序/需要使用正确的过滤器。ResourceFilter 将在模型绑定之前运行,ActionFilter 将在模型绑定之后运行。
打开App,查看更多内容
随时随地看视频慕课网APP