Защита сайта .NET Core MVC от попыток входа в систему методом «грубой силы» (с помощью встроенных средств) - PullRequest
0 голосов
/ 19 октября 2018

Я использую Шпаргалку OWasp Security для проверки / усиления безопасности на созданном мною веб-сайте .net.

В разделе A2 есть часть защиты от перебора.принудительные попытки входа.

В нем говорится, что решение состоит в том, чтобы добавить следующий атрибут в действие входа в систему (но это для MVC5)

[AllowXRequestsEveryXSecondsAttribute(Name = "LogOn", Message = "You have performed this action more than {x} times in the last {n} seconds.", Requests = 3, Seconds = 60)]

. Ядро ядра .net создает часть входакак page, а не как контроллер MVC, и я не могу получить доступ к этому атрибуту (или выработать аналогичный).

Очевидно, я мог бы использовать такие сообщения, как this и это для развертывания моего собственного решения, но я бы предпочел использовать стандартные инструменты там, где они доступны.

Я бы предпочел не использовать функцию блокировки, если смогу помочь, так какувеличит поддержку.

Есть ли в .NET Core что-то встроенное, что я могу использовать?

1 Ответ

0 голосов
/ 18 января 2019

Вернулся к этому через несколько месяцев свежим взглядом и обнаружил сообщение от Microsoft, в котором содержится Блокировка учетной записи для защиты от атак методом перебора , которая будет слоем безопасности, хотя и не будет всеобъемлющей защитой.так как старый MVC5 AllowXRequestsEveryXSecondsAttribute включен.

Он остановит многократные попытки для одного письма, но не остановит многократные попытки для многих писем.

, т. е. не позволит кому-либо сделать

  • имя пользователя: 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 (бит ключа - часть options.Lockout):

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);
}

Упдат. е. (после обсуждения с основной группой)

I поднял с командой .NET Core на Github.

Атрибут AllowXRequestsEveryXSecondsAttribute, упомянутый в контрольном листе OWasp, взят из external libray , который, по их мнению, может быть преобразован в .NET Core, но они не считают его приоритетным длявключить что-то как часть структуры.Их рекомендация состояла в том, чтобы изучить решения Azure «AAD или B2C» или «Auth0».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...