Security F5/F6 + Konzept-Status: DB-TLS-Startwarnung, Log-Redaction geprueft

- F5: Startwarnung, wenn der DB-Connection-String kein SslMode erzwingt (String selbst wird
  nie geloggt). Eure Connection enthaelt bereits SslMode -> Warnung bleibt aus.
- F6: geprueft - keine Secret-Werte in Logs (nur Vorhandensein-Flags/Fehlermeldungen).
- Sicherheitskonzept: Status F1-F7 dokumentiert.

Build 0 Fehler, --smoke-ui ok.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-15 08:54:50 +02:00
co-authored by Claude Opus 4.8
parent f3ed63cf9d
commit 36c89a6acf
2 changed files with 37 additions and 0 deletions
+24
View File
@@ -138,6 +138,9 @@ internal static class Program
// Quelle: Umgebungsvariable POLYTRADER_MASTER_KEY, sonst gitignorierte master.key im App-Ordner.
ConfigureSecretProtection(AppHost.Services.GetRequiredService<TerminalLogger>());
// F5 (Sicherheit): warnen, wenn die (remote) DB-Verbindung keine TLS-Erzwingung hat.
WarnIfDbTlsNotEnforced(AppHost.Services);
try
{
// Trade-Nummerierung fortsetzen: höchste bestehende TradeId serverseitig lesen
@@ -324,6 +327,27 @@ internal static class Program
"Master-Key setzen (env POLYTRADER_MASTER_KEY oder master.key), siehe docs/sicherheit.");
}
/// <summary>
/// F5: Warnt, wenn der DB-Connection-String keine TLS-Erzwingung (SslMode) enthält. Der String
/// selbst wird NICHT geloggt (enthält das Passwort) nur das Fehlen der TLS-Option.
/// </summary>
private static void WarnIfDbTlsNotEnforced(IServiceProvider services)
{
try
{
var config = services.GetService<Microsoft.Extensions.Configuration.IConfiguration>();
string conn = config?["Database:MySqlConnectionString"] ?? string.Empty;
if (string.IsNullOrEmpty(conn)) return;
if (conn.IndexOf("sslmode", StringComparison.OrdinalIgnoreCase) < 0)
{
services.GetRequiredService<TerminalLogger>().Warning(
"⚠️ SICHERHEIT: DB-Verbindung ohne SslMode Transportverschlüsselung zur (remote) MySQL nicht erzwungen. " +
"Im Connection-String 'SslMode=Required' (oder VerifyFull) setzen, siehe docs/sicherheit.");
}
}
catch { /* Warnung ist best-effort; darf den Start nie stören */ }
}
/// <summary>
/// F1: Verschlüsselt einmalig/idempotent evtl. vorhandene Klartext-Credentials in der DB (Alt-Bestand
/// wird beim Re-Save durch den EF-Converter verschlüsselt). Nur wenn ein Master-Key gesetzt ist.