为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
四季花海 2022-01-09 15:09:56
在 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; }...
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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


查看完整回答
反对 回复 2022-01-09
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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

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


查看完整回答
反对 回复 2022-01-09
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我知道这已经一岁了,但是为了您(和其他人)的参考,您可能想看看创建一个 ResourceFilter 或 Middleware 来清理传入的请求。您可以在那里使用您想要的任何工具或自定义代码,但关键是所有传入的请求都通过此过滤器以清除不良数据。

确保为您的应用程序/需要使用正确的过滤器。ResourceFilter 将在模型绑定之前运行,ActionFilter 将在模型绑定之后运行。


查看完整回答
反对 回复 2022-01-09
  • 3 回答
  • 0 关注
  • 313 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信