在 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贡献1757条经验 获得超8个赞
防止存储/反射 XSS的最佳方法之一是对输出进行HTML 编码。您也可以在将其存储在数据库中之前对其进行编码。因为无论如何您都不需要这些字段的输出以 HTML 格式。
使用正则表达式的解决方案并不总是有效。你在这里做的是你依赖一个黑名单。依赖白名单总是更好,更安全(在这种情况下你不需要)。或者如果可能的话,对输出进行 HTML 编码。
Cats萌萌
TA贡献1805条经验 获得超9个赞
我知道这已经一岁了,但是为了您(和其他人)的参考,您可能想看看创建一个 ResourceFilter 或 Middleware 来清理传入的请求。您可以在那里使用您想要的任何工具或自定义代码,但关键是所有传入的请求都通过此过滤器以清除不良数据。
确保为您的应用程序/需要使用正确的过滤器。ResourceFilter 将在模型绑定之前运行,ActionFilter 将在模型绑定之后运行。
- 3 回答
- 0 关注
- 313 浏览
添加回答
举报
0/150
提交
取消