如何防止ASP.NET Core中的XSS?

问题描述 投票:4回答:3

在ASP.NET中我们有Request Validation,但是在ASP.NET Core中没有这样的东西。

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

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

[RegularExpression(@"^[a-zA-Z0-9 -']*$", ErrorMessage = "Invalid characters detected")]
public string Name { get; set; }

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

X-XSS要做的事情>有限的<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();
}

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

我想做一些简单的事情:

myField = myField.Replace('<','').Replace('>','').Replace('&','').Repl...;
  • 在所有数据提交 - 但它似乎有点不稳定。

我已经向微软提出了同样的问题,但我很想知道人们如何在现实生活中解决这个问题。

更新:我们正在努力实现的目标:

在我们的应用程序中,我们有webforms,人们可以输入姓名,电子邮件,内容和类似内容。数据存储在数据库中,将来可以在前端系统和其他系统上查看(如RSS feed,JSON等)。某些表单包含richtext编辑器(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; }

...
c# asp.net-core xss
3个回答
2
投票

防止存储/反射XSS的最佳方法之一是对输出进行HTML编码。您也可以在将其存储在数据库中之前进行编码。因为您无需将这些字段的输出设置为HTML。

使用Regex的解决方案并不总是有效。你在这里做的是你依赖黑名单。要么依赖白名单(在这种情况下你不需要),它总是更好,更安全。或者HTML-如果可能的话对输出进行编码。


2
投票

具体你想在这做什么?在未经消毒的xss攻击时,防止可能包含可能呈现的内容的帖子?如果是这样的话,正如我最近与同事讨论的那样,根据您的网站,您不能这样做。

我的意思是,您可以对发布的数据提供客户端限制,但这显然可以绕过,那么您的行动是什么尝试?防止发布的内容在未经过清理时是否存在潜在的xss风险?

你发布的端点负责的是什么?它是否负责其他系统如何呈现它收到的输出?

我认为你的主要xss风险在于应用如何呈现你的数据。如果您没有根据使用数据的应用程序清理/编码输出,那么您可能做错了。

请记住,如果您正在向网页或类似网页输出内容,则潜在的xss问题只是一个真正的问题。这实际上不是接收数据问题的端点。


0
投票

您可以在ASP.NET Core中使用HtmlSanitizer libraray。

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