Search
Write a publication
Pull to refresh
13
0
Александр Рахманный @rahmanny

Backend Developer

Send message

Если мы говорим о образах с .NET, то MS оперативно выпускает новые версии базовых образов с исправлениями и интересного на данный момент нет.

Но я просканировал образ, которые собирал более года назад (на основе последней доступной версий mcr.microsoft.com/dotnet/aspnet ) и нашел несколько интересных уязвимостей, которые потенциально могут привести к DoS или влиять на безопасность:

  • CVE-2023-36799 - A vulnerability exists in .NET where reading a maliciously crafted X.509 certificate may result in Denial of Service. This issue only affects Linux systems.

  • CVE-2023-4911 - buffer overflow in ld.so leading to privilege escalation

  • CVE-2023-36054 - krb5: Denial of service through freeing uninitialized pointer

  • CVE-2018-8292 - .NET Core: information disclosure due to authentication information exposed in a redirect

  • CVE-2023-36558 - ASP.NET Security Feature Bypass Vulnerability in Blazor forms

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

Приведу пример: в одной из библиотек приложения есть уязвимость RCE (удаленное выполнение кода). С установленными в контейнере утилитами, менеджером пакетов не составит труда снять дамп памяти вашего процесса и отправить его на удаленный сервер для последующего анализа. С другой стороны если в контейнере есть только рантайм и ваше приложение вектор атаки сильно сокращается.

Спасибо за статью. Мое субъективное мнение - мне больше нравятся кодогенераторы, во первых можно поставить точку останова и посмотреть, что там происходит, во вторых можно взять этот код за основу и дописать более сложную логику с вычисляемыми полями. Я ранее пользовался mappinggenerator.net для такого, посмотрю вариант Mapster с кодогенерацией. А кодогенерация работает в связке с EF? Чтобы не приходилось вручную писать методы расширения:

public static IQueryable<UserDto> MapUserToDTO(this IQueryable<User> users)
    
        return users.Select(u => new UserDto
        {
            Id = u.Id,
            Email = u.Email,
            Name = u.Name
        });
    }
var user = await ctx.Users.MapUserToDTO().ToListAsync()

Возможно, вы правы, работаю со Stopwatch крайне редко. Но не вижу большой проблемы использовать его приватном поле объекта

private readonly Stopwatch _timer = new Stopwatch();

я не создаю Stopwatch экземпляр при каждом вызове метода, а учитывая что экземпляры класса подключаю синглтоном

builder.Services.AddSingleton<RegexPredictor, RegexPredictor>();

либо выбираю доступный экземпляр из пула

builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>()
    .FromFile(filePath: "GeneralModel.mlnet", watchForChanges: true);

экземпляр не будет часто пересоздаваться. Или есть другие причины?

  1. Скрины с локально запущенного экземпляра. В проде это все работает в k8s, и доступ между сервисами ограничен политиками сетевого доступа. Обычно в кубере терминация ssl на уровне ingress, теоретическая возможность прослушивания нешифрованного трафика внутри есть.

  2. Хороший вопрос. Мы разбиваем тикет, комментарии и другие поля по символу переноса строки и отправляем разными запросами. Что будет, если в тикете появится на столько длинная строка без переносов - API выдаст 500 и эта строка будет пропущена. Спасибо, что подсветили этот момент, таких строк у нас еще не было, но заложим этот случай.

  3. На старте проекта мы тоже искали готовые датасеты для обучения, но по понятным причинам их никто не публикует. Ну и мы не будем)

Все верно, у нас сейчас 2 сервиса, первый по "крону" (под капотом Quartz.NET) раз в несколько минут забирает из Jira api новые и измененные тикеты и комментарии за это время, после чего передает во второй сервис, который оценивает строку и выдает результат. Если сервис что-то нашел, мы сохраняем в БД номер тикета и хэш строки, для исключения повторного анализа и алертинга. На счет существующих решений - есть большое количество решений для git репозиториев, но именно для таск трекера находил несколько. Одни так же работали по API, забирая все тикеты по критериям (n0s1). Другие встраивались в Jira, но сканировали не в моменте создания тикета/написания комментария (security-for-jira), а по кнопке или расписанию. На счет запрета постинга со стороны Jira - я вижу только одну возможность, как мы можем запретить, это повесив проверку на момент создания тикета либо на этапе переходов состояния (например, New -> InProgress). Но тут есть сложности - это настраивается на каждом workflow а у нас их довольно много. Так же эта проверка не отработает, при написании комментария, либо после редактирования.

Фишинг и соц. инженерия "хорошая" точка входа в организацию.

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

Скачайте шаблоны командой dotnet new -i Microsoft.Maui.Templates

Если после этого в студии не появятся - необходимо в Visual Studio Installer установить Universal Windows Platform и опциональный компонент C++ (v143) Universal Windows Platform tools, без него темплейты не появлялись у меня:

P.S. Сам вчера поставил WIndows 11, VS 2022 Preview 3.1 и попробовал установить MAUI, потратил несколько часов. Надеюсь к релизу они сделают нормальный установщик.

Попробуйте запустить консоль от администратора, а уже в ней maui-check, мне помогло с такой же проблемой.

Так же для работы maui-check нужен NET 5

Есть фронт под веб - Blazor, но на мой взгляд, пока сыроват под крупные проекты

В настоящее время PowerShell, на мой взгляд, закрывает процентов 90 задач администрирования в экосистеме MS. Кроме того, многие другие вендоры выпускают свои модули для PS: VMware, Citrix, Amazon и др. У MS далеко не все продукты получаются удачными, но PS вышел таким, если его рассматривать как инструмент администрирования и автоматизации, для чего он и предназначен.
Я тоже пробовал прикручивать к PS интерфейс, но не нашел простого решения проблемы фриза формы при длительных вычислительных и сетевых операциях, пришлось переписать пару утилит на C# с async/await.
Попробуйте переписать GUI на WPF используя XAML, у вас будет два файла — один с кодом, второй с разметкой. На мой взгляд разметка XAML удобнее
<Button Name="ExitButton" Content="Выход" Click="ExitButton_OnClick" TabIndex="15"/>
 

чем WinForm
$buttonВыход.Location = '7, 125'
$buttonВыход.Name = 'buttonВыход'
$buttonВыход.Size = '133, 23'
$buttonВыход.TabIndex = 15
$buttonВыход.Text = 'Выход'
$buttonВыход.UseCompatibleTextRendering = $True
$buttonВыход.UseVisualStyleBackColor = $True
$buttonВыход.add_Click($buttonВыход_Click)

В качестве плюса вы получите относительное позиционирование элементов при разном размере окна и разрешений экрана.
Ну не совсем так. ИТ ограничивается не только ИТ компаниями, есть еще производственные организации с 2000+ рабочих мест. Чаще всего стек технологий MS (AD, Exhcange, S4B, DFS, SCCM). Я бы не назвал сотрудников данных организаций не состоявшимися инженерами, там есть крупные и интересные задачи, которые требуют хороших навыков администрирования и автоматизации.
А вы не пробовали вместо позиций младшего системного администратора/сотрудника тех поддержки откликаться на вакансии инженеров по автоматизации или DevOps? Компаний, с ядром инфраструктуры на продуктах MS, часто ищут подобных специалистов.

Аналогичная ситуация была, в качестве хобби делал одностраничные програмки на WinForm для автоматизации рутины. В первое время отталкивало отсутствие визуального редактора, для каждого изменения необходимо было заново билдить приложение, что отнимает не мало времени. В прошлом году появилась отличная фича — XAML Hot Reload, позволяющая изменять разметку XAML во время выполнения приложения, что экономит кучу времени.
Начните с самого простого расположения — StackLayout, когда элементы располагаются друг за другом, после попробовать Grid. Для более сложной разметки комбинацию данных слоев.

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Security Engineer
C#
.NET Core
Entity Framework
ASP.Net
Docker