Как защитить веб-приложение asp.net core?

Asp.net Core является наиболее мощным, универсальным и полным фреймворком, широко используемым разработчиком для разработки веб-приложений, настольных, мобильных и облачных приложений. В отличие от мобильных и настольных приложений, веб-приложение работает на общедоступном адресе, поэтому безопасность веб-приложения очень важна. В Asp.Net Core реализованы лучшие функции с лучшими практиками безопасности, но все равно существуют уязвимости, и мы несем ответственность за безопасность нашего веб-приложения до и после запуска нашего веб-приложения Asp.Net Core.

Почему .Net Core лучше с точки зрения безопасности?

Asp.net предоставляет такие возможности, как аутентификация, авторизация, защита данных, применение HTTPS, секреты приложений, предотвращение XSRF/CSRF и управление CORS. Таким образом, разработчик может легко конфигурировать и управлять безопасностью своего приложения.

ASP.NET Core предоставляет инструменты и библиотеки, такие как встроенные провайдеры идентификации, сторонние провайдеры идентификации, такие как Facebook, Twitter и LinkedIn, для обеспечения безопасности вашего веб-приложения.

Общие уязвимости

Уязвимости

Уязвимости программного обеспечения означают слабости или недостатки, присутствующие в коде или в чем-либо, что позволяет подвергать информационную безопасность угрозе.

Asp.net core содержит функции, которые помогают разработчику защитить свое веб-приложение и предотвратить нарушения безопасности. Рекомендуется получить лучшие советы по безопасности для защиты приложения Существует больше уязвимостей, о которых разработчик должен знать. Следующий список содержит наиболее распространенные уязвимости:

  • Межсайтовый скриптинг (XSS) атаки
  • Атаки SQL-инъекций
  • Атаки подделки межсайтовых запросов (XSRF/CSRF)
  • Атаки открытого перенаправления

Атаки межсайтового скриптинга (XSS)

Межсайтовый скриптинг (XSS) — это уязвимость безопасности, при которой злоумышленник размещает на веб-страницах сценарии на стороне клиента (обычно JavaScript). Когда другие пользователи получают доступ к затронутым страницам, сценарии злоумышленника запускаются автоматически, что позволяет злоумышленнику украсть учетные данные из cookies и токенов сессии. Хакер может изменить содержимое веб-страницы через DOM или перенаправить браузер на другую страницу.

XSS-уязвимости обычно возникают, когда приложение взаимодействует с пользователем через входные данные и выводит страницу без валидации, кодирования или экранирования.

Скрипт может быть внедрен следующими способами:

  • Вводы формы
  • Строки запросов URL
  • HTTP-заголовки

Как предотвратить межсайтовый скриптинг

Межсайтовый скриптинг можно предотвратить следующим образом:

  • Атрибуты регулярных выражений
  • Объектная модель регулярного выражения
  • Кодирование HTML
  • Кодировка URL

Подробнее: Использование Linq в MVC .NET Core

Регулярное выражение
С помощью регулярных выражений вводимые данные формы могут быть проверены, и пользовательская форма запрещает ввод специальных символов, символов и разрешает только требуемый символ перед переходом на следующую страницу.


public class Student
{


 // Allow up to 15 uppercase and lowercase 
 // characters. Use custom error.
 [RegularExpression(@"^[a-zA-Z''-'s]{1,15 }$", 
    ErrorMessage = "Characters are not allowed.")]
 public object FirstName;

 // Allow up to 15 uppercase and lowercase 
 // characters. Use standard error.
[RegularExpression(@"^[a-zA-Z''-'s]{1,15}$")]
 public object LastName;
}

Вход в полноэкранный режим Выход из полноэкранного режима

Примечание:

Используя регулярное выражение, вы можете выполнять проверку на стороне клиента и сервера.

Объектная модель регулярного выражения

Используя объектную модель регулярного выражения, разработчик может проверять вводимые пользователем данные, вызывая статические методы класса Regex.

Кодирование HTML
Движок Razor, используемый в MVC, автоматически кодирует все входные данные, получаемые из переменных, так что вредоносный скрипт никогда не будет выполнен. <,», >используется в атаке.


@{
 var val = "<"virat">";
}
@val
<!--"virat"-->

Вход в полноэкранный режим Выход из полноэкранного режима

Итак, движок Razor кодирует переменные в следующем формате:

HTML-файл

<"virat">
< "Virat">
<!--"virat"-->

Войти в полноэкранный режим Выйти из полноэкранного режима

Кодирование URL

Обычно разработчик использует обычный текст в строке запроса, что приводит к XSS-атаке, поэтому мы должны использовать кодированную строку запроса. Вы можете использовать кодировку по умолчанию, предоставленную в


System.Text.Encodings.Web.        

Войти в полноэкранный режим Выйти из полноэкранного режима

Пример


public class HomeController: Controller
  {
UrlEncoder _urlEncoder
public HomeController(UrlEncoder urlEncoder)
  {
_urlEncoder = urlEncoder;
  }
}
var example = ""Virat kohli&"";
var encodedValue = _urlEncoder.Encode(example);

Войти в полноэкранный режим Выход из полноэкранного режима

Атаки с использованием SQL-инъекций

Атака SQL-инъекции является наиболее распространенной атакой. При SQL-инъекции злоумышленник размещает вредоносный SQL-код, который затем запускается в вашей базе данных и позволяет злоумышленникам получить доступ к конфиденциальной информации, хранящейся в базе данных.

При SQL-инъекции неавторизованный пользователь помещает в поле ввода какое-либо условие или специальные символы, что приводит к изменению выполнения всего запроса.

Пример

SELECT * FROM db WHERE Username = «ViratKohli» AND Password = «runMachine»

SELECT * FROM db WHERE Username =»» или «»=»» AND Password =»» или «»=»»

Как предотвратить SQL Injection?

SQL Injection можно предотвратить следующим образом:

  • Проверяйте вводимые данные
  • Использовать хранимые процедуры
  • Использовать параметризованные запросы
  • Использовать Entity Framework или любой другой ORM
  • Храните зашифрованные данные

Валидация вводимых данных
Проверяйте вводимые пользователем данные как на стороне клиента, так и на стороне сервера с помощью регулярных выражений и аннотаций данных, а также не допускайте специальных символов, используемых в SQL-скрипте.

хранимые процедуры

Используйте хранимые процедуры для предотвращения SQL-инъекций, но также проверяйте передачу параметров в хранимую процедуру.

Используйте параметризованные запросы

Пример:


SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand("select name from student where id=@id", connection);
command.Parameters.Add("@id", SqlDbType.Int);
command.Parameters["@id"].Value = id

Вход в полноэкранный режим Выход из полноэкранного режима

Используйте Entity Framework или любой другой ORM

ORM означает объектно-реляционный картограф, который сопоставляет объекты SQL с классами. Используйте Entity Framework для предотвращения SQL-инъекций, поскольку Entity Framework использует параметризованные запросы.

Храните зашифрованные данные

Используйте технику шифрования для конфиденциальных данных, таких как электронная почта, пароль и т.д.

Атаки подделки межсайтовых запросов (XSRF/CSRF)

Злоумышленник использует преимущества авторизованной сессии. Злоумышленник действует как доверенный источник между авторизованным пользователем и сайтом и отправляет на сайт поддельные данные. Сайт обрабатывает поддельные данные, так как считает, что они исходят от авторизованного пользователя.

Как предотвратить подделку межсайтовых запросов

С помощью AntiForgeryToken разработчики могут предотвратить атаку. Мы можем использовать атрибут anti-forgery в теге Html и установить его значение как true. Значение по умолчанию для anti-forgery равно false. Добавьте атрибут [ValidateAntiForgeryToken] в метод post, чтобы проверить, сгенерирован ли правильный токен.

virat">

Вход в полноэкранный режим Выход из полноэкранного режима

@Html.AntiForgeryToken()


[HttpPost]
[ValidateAntiForgeryToken]
public async Task<iactionresult><"virat"> Login(LoginModel data)
{
    …
}
<!--"virat"--></iactionresult>

Вход в полноэкранный режим Выход из полноэкранного режима

Атаки с открытым перенаправлением

Веб-приложения часто перенаправляют неаутентифицированных пользователей на страницу входа в систему, когда они обращаются к ресурсам, требующим аутентификации. После успешной аутентификации URL перенаправления обычно включает строку запроса return URL, чтобы пользователь мог вернуться к исходному запрашиваемому URL.

URL перенаправления указывается в строке запроса, злоумышленник может подделать (вмешаться (во что-то) с целью причинения ущерба или внесения несанкционированных изменений) строку запроса. Строка запроса позволяет перенаправить пользователя на внешний, вредоносный сайт.

Защита от локального перенаправления
Используйте метод LocalRedirect

Метод local Redirect аналогичен методу Redirect, но выбрасывает исключение, если указан нелокальный URL.


public IActionResult SomeAction(string redirectUrl)
{
return LocalRedirect(redirectUrl);
}          

Вход в полноэкранный режим Выход из полноэкранного режима

Ищете выделенного веб-разработчика ASP.NET Core? Ваш поиск закончится здесь.

IsLocalUrl

С помощью метода IsLocalUrl пользователь может проверить URL перед перенаправлением и защитить пользователей от перенаправления на вредоносные сайты.


private IActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction(nameof(HomeController.Index), "Home");
}
}         

Вход в полноэкранный режим Выход из полноэкранного режима

Важные моменты для обеспечения безопасности веб-приложения Asp.net core

Использование пользовательской страницы ошибок для обработки ошибок

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

Как добавить правильную пользовательскую обработку ошибок

public void Configure(IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/home/error");
}
app.UseMvcWithDefaultRoute();
}

Вход в полноэкранный режим Выход из полноэкранного режима

Безопасный вход в систему

Страница входа в систему — это как входная дверь для любого приложения. Если злоумышленник получает доступ к панели администратора, то он может получить доступ ко всему приложению. Поэтому защита входа очень важна.

Как защитить вход в систему:

Используйте сложные учетные данные для входа

Никогда не используйте общие имя пользователя и пароль для панели администратора.

Пример: Никогда не используйте имя пользователя admin и пароль 1234. Используйте сложные имена пользователей и пароли.
Всегда используйте функцию идентификации .net core

Asp.Net Core предоставляет множество встроенных библиотек и инструментов для защиты ваших приложений. Используйте авторизацию для полного процесса входа и регистрации.

Предложения:

  • Используйте Captcha, например, Match Captcha, Letter Captcha при входе в систему, потому что бот не может заполнить Captcha.
  • Блокируйте IP-адрес, если не удается войти в систему более 1 раза.
  • Включите алфавиты (A-Z & a-z), цифры (0-9) & специальные символы (! , @, ., #, $, %, ^, &,* и другие) в ваш пароль и сделайте его надежным.

Используйте шифрование

Пример:

Используйте функцию Hash для шифрования конфиденциальных данных. Включите в свою программу следующее пространство имен.


using System;
using System.Security.Cryptography;
using Microsoft.AspNetCore.Cryptography.KeyDerivatio

Вход в полноэкранный режим Выход из полноэкранного режима

Зашифруйте данные с помощью следующей функции


static string HashSh1(string input)
 {
  byte[] salt = new byte[128 / 8];
  using (var rng = RandomNumberGenerator.Create())
 {
 rng.GetBytes(salt);
 }
  Console.WriteLine($"Salt: {Convert.ToBase64String(salt)}");

 // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
  string Encypt = Convert.ToBase64String(KeyDerivation.Pbkdf2(
  password: input,
  salt: salt,
  prf: KeyDerivationPrf.HMACSHA1,
  iterationCount: 10000,
  numBytesRequested: 256 / 8));

  return Encypt;
}         

Войти в полноэкранный режим Выйти из полноэкранного режима

Очистить куки

Управление файлами cookie и удаление файлов cookie после выхода из системы.

Пример: Удаление всех Cookies после выхода из системы. Используйте метод Response.Cookies.Delete() для удаления всех файлов cookie


private void DeleteCookies()
{
foreach (var cookie in HttpContext.Request.Cookies)
{
Response.Cookies.Delete(cookie.Key);
}
}

Вход в полноэкранный режим Выход из полноэкранного режима

Использовать SSL

Использование SSL означает Secure Socket Layer (уровень защищенных сокетов), чтобы сделать обмен данными между клиентом и сервером зашифрованным с помощью очень надежного ключа. Доступ к приложению осуществляется в режиме HTTPS. В файле Starup.cs вашего приложения Asp.Net Core вы можете установить политику безопасности для Cookies.

Использование SSL означает Secure Socket Layer (уровень защищенных сокетов), что делает обмен данными между клиентом и сервером зашифрованным с помощью очень надежного ключа. SSL обеспечивает безопасный уровень между пользователем и сервером, так что запросы, передаваемые между браузером пользователя и сервером, и ответы от сервера к браузеру пользователя будут зашифрованы, чтобы сохранить целостность и безопасность данных.

Доступ к приложению в режиме HTTPS. HTTP (Hypertext Transfer Protocol Secure) используется для обеспечения безопасности в вашем приложении ASP.NET Core.

Настройка на HTTPS доступна в Visual studio при выборе шаблона веб-приложения.

В файле Starup.cs вашего приложения Asp.Net Core вы можете установить политику безопасности для Cookies.

Подробнее: Как защитить публичные Apis в Asp.NET Core?

HSTS (HTTP Strict Transport Security)

HSTS — это политика веб-безопасности, которая защищает ваше веб-приложение от перехвата файлов cookie и обеспечивает связь через HTTPS-соединение. HTTP Strict Transport Security всегда отклоняет небезопасные HTTP-соединения.

Веб-приложение asp.net Core по умолчанию добавляет HTTP Strict Transport Security.

Используйте журналы аудита

Лучшей практикой является мониторинг журналов активности веб-приложений, которые используются для сбора информации, например, о попытках входа в систему.
Log4Net Elmah — наиболее часто используемая библиотека для регистрации активности.
Пользовательская реализация

Вы можете использовать пользовательскую реализацию регистрации активности.

Что хранить в журнале

  • Электронная почта пользователя/имя пользователя/идентификатор
  • Полное имя
  • Ip-адрес клиентской системы
  • Текущее время
  • Свойство агента пользователя JavaScript Navigator
  • Тип активности в журнале (например, Вход в систему, Выход из системы, Редактирование информации о профиле, Изменение пароля)

Как получить свойство JavaScript Navigator userAgent

Для получения свойства JavaScript Navigator useAgent в веб-приложении Asp.net core используется единичный оператор navigator.userAgent.

Как получить Ip-адрес клиента?

Вы можете использовать следующий оператор:

Скрыть версию

Удалить заголовок версии Asp.net

Всякий раз, когда клиент посылает HTTP-запрос серверу, в ответ клиент получает заголовок ответа со следующей информацией:

  • сервер
  • x-powered-by
  • x-aspnet-version
  • x-aspnetmvc-version
  • x-sourcefiles

Сервер: Имя сервера.

X-Aspnet-Version: Показывает версию фреймворка ASP.NET, используемую сайтом.

X- AspnetMvc-Version: Это показывает версию фреймворка ASP.NET MVC, используемую сайтом.

X-SourceFiles: Используется локальным хостом.

Удалить заголовок X-Powered-By

Внесите следующие изменения в файл веб-конфигурации

Удалить заголовок X- AspnetMvc-Version

Внесите следующие изменения в файл Global.aspx

Удалить заголовок X- Aspnet-Version

Внесите следующие изменения в файл веб-конфигурации

Обновление фреймворка и библиотек
Всегда используйте обновленные фреймворки и библиотеки. Никогда не используйте устаревшие библиотеки или фреймворки в своем проекте, потому что злоумышленники всегда находят уязвимости в старых фреймворках и библиотеках.

Заключение

Asp.net является одним из самых безопасных фреймворков, но мы все еще должны защищать наши приложения от вредоносных действий. Используя обычные методы, пользователи могут легко разрабатывать безопасные приложения .NET core. Используя эти методы, пользователь может защитить свое приложение от различных атак.

Оцените статью
Procodings.ru
Добавить комментарий