Security 保护.NET核心MVC网站免受暴力登录尝试(通过内置方式)

Security 保护.NET核心MVC网站免受暴力登录尝试(通过内置方式),security,authentication,.net-core,asp.net-core-mvc,Security,Authentication,.net Core,Asp.net Core Mvc,我正在使用检查/加强我创建的.net核心网站的安全性 第A2节有一个关于防止暴力登录尝试的部分 它指出一个解决方案是在登录操作上添加以下属性(但它是针对MVC5的) [AllowXRequestsEveryXSecondsAttribute(Name=“LogOn”,Message=“您在过去{n}秒内执行此操作超过{x}次。”,Requests=3,seconds=60)] net核心支架将登录部分创建为页面,而不是MVC控制器,我似乎无法访问该属性(或创建类似的属性) 显然,我可以使用诸如和

我正在使用检查/加强我创建的.net核心网站的安全性

第A2节有一个关于防止暴力登录尝试的部分

它指出一个解决方案是在登录操作上添加以下属性(但它是针对MVC5的)

[AllowXRequestsEveryXSecondsAttribute(Name=“LogOn”,Message=“您在过去{n}秒内执行此操作超过{x}次。”,Requests=3,seconds=60)]

net核心支架将登录部分创建为
页面
,而不是MVC控制器,我似乎无法访问该属性(或创建类似的属性)

显然,我可以使用诸如和之类的帖子来推出我自己的解决方案,但我更愿意在可用的地方使用标准工具

如果可以的话,我不想使用锁定功能,因为这会增加支持


.NETCore是否有我可以使用的内置功能

几个月后以全新的眼光回到这里,发现微软发布了一篇文章,其中包括,这将是一个安全层,尽管不像旧的MVC5
allowxRequestSeveryXSecondattribute
启用的那样是一个全面的保护

它将阻止针对一封电子邮件的多次尝试,但不会阻止针对多封电子邮件的多次尝试

i、 它将阻止某人做某事

  • 用户名:user1@test.com,密码:Password121
  • 用户名:user1@test.com,密码:Password122
  • 用户名:user1@test.com,密码:Password123
但这不会阻止某人做:

  • 用户名:user1@test.com,密码:Password123
  • 用户名:user2@test.com,密码:Password123
  • 用户名:user3@test.com,密码:Password123
下面是从Microsoft摘录的代码(它们的关键部分是
选项.锁定
部分):

public void配置服务(IServiceCollection服务)
{
//添加框架服务。
services.AddDbContext与Github上的.NET核心团队进行了讨论


OWasp检查表中提到的
allowxRequestSeveryXSecondatAttribute
属性来自,他们认为可以转换为.NET Core,但他们不认为将某些内容作为框架的一部分是优先考虑的。他们的建议是查看Azure解决方案“AAD或B2C”或“Auth0”。

如果出现答案,请在此处跳过此项,但到目前为止,您似乎必须遵循其他堆栈溢出帖子并滚动自己的页面。
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    services.Configure<IdentityOptions>(options =>
    {
        options.Lockout.MaxFailedAccessAttempts = 10;
        options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10);
    });

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
    services.Configure<SMSoptions>(Configuration);
}