Added a prompt injection detection (#857)

Co-authored-by: Thorsten Sommer <SommerEngineering@users.noreply.github.com>
This commit is contained in:
Sabrina-devopsandThorsten Sommer authored and GitHub committed 2026-08-23 11:09:11 +02:00
1 parent d3163badd9
commit 902a01a4d0
55 files changed
+5598 -70

No files matched your search

@@ -5,6 +5,7 @@ using AIStudio.Tools.AIJobs;
using AIStudio.Tools.AssistantSessions;
using AIStudio.Tools.Media;
using AIStudio.Tools.PluginSystem;
using AIStudio.Tools.Security;
using AIStudio.Tools.Rust;
using AIStudio.Tools.Services;
@@ -71,6 +72,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
private bool startupCompleted;
private bool settingsWriteProtectionWarningShown;
private readonly SemaphoreSlim mandatoryInfoDialogSemaphore = new(1, 1);
private readonly SemaphoreSlim promptInjectionDialogSemaphore = new(1, 1);
private IReadOnlyCollection<NavBarItem> navItems = [];
@@ -112,7 +114,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
this.MessageBus.ApplyFilters(this, [],
[
Event.UPDATE_AVAILABLE, Event.CONFIGURATION_CHANGED, Event.COLOR_THEME_CHANGED, Event.SHOW_ERROR,
Event.SHOW_WARNING, Event.SHOW_SUCCESS, Event.SHOW_INFO, Event.STARTUP_PLUGIN_SYSTEM, Event.PLUGINS_RELOADED,
Event.SHOW_WARNING, Event.SHOW_SUCCESS, Event.SHOW_INFO, Event.SHOW_PROMPT_INJECTION_ALERT, Event.STARTUP_PLUGIN_SYSTEM, Event.PLUGINS_RELOADED,
Event.INSTALL_UPDATE, Event.STARTUP_COMPLETED, Event.AI_JOB_CHANGED, Event.AI_JOB_FINISHED,
Event.CHAT_GENERATION_CHANGED, Event.ASSISTANT_SESSION_CHANGED, Event.ASSISTANT_SESSION_FINISHED,
]);
@@ -254,6 +256,12 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
break;
case Event.SHOW_PROMPT_INJECTION_ALERT:
if (data is PromptInjectionAlertMessage promptInjectionAlert)
await this.ShowPromptInjectionAlertAsync(promptInjectionAlert);
break;
case Event.SHOW_ERROR:
if (data is DataErrorMessage error)
error.Show(this.Snackbar);
@@ -348,6 +356,32 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
});
}
private async Task ShowPromptInjectionAlertAsync(PromptInjectionAlertMessage alert)
{
await this.promptInjectionDialogSemaphore.WaitAsync();
try
{
if (!this.SettingsManager.ConfigurationData.App.ShowPromptInjectionAlert)
return;
var dialogParameters = new DialogParameters<PromptInjectionAlertDialog>
{
{ x => x.Alert, alert },
};
var dialogReference = await this.DialogService.ShowAsync<PromptInjectionAlertDialog>(
T("Security notice"),
dialogParameters,
DialogOptions.FULLSCREEN);
await dialogReference.Result;
}
finally
{
this.promptInjectionDialogSemaphore.Release();
}
}
public Task<TResult?> ProcessMessageWithResult<TPayload, TResult>(ComponentBase? sendingComponent, Event triggeredEvent, TPayload? data)
{
return Task.FromResult<TResult?>(default);