在 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; }
...
守着星空守着你
陪伴而非守候
Cats萌萌
相关分类