English 日本語
preview
Erstellen eines Handelsadministrator-Panels in MQL5 (Teil VII): Vertrauenswürdiger Nutzer, Wiederherstellung und Kryptografie

Erstellen eines Handelsadministrator-Panels in MQL5 (Teil VII): Vertrauenswürdiger Nutzer, Wiederherstellung und Kryptografie

MetaTrader 5Beispiele | 3 April 2025, 09:24
85 0
Clemence Benjamin
Clemence Benjamin

Inhalt:


Einführung

Der MQL5-Markt ist ein Beispiel für die Bedeutung der Geräteidentität bei der Gewährleistung der Sicherheit von verteilten Produkten. Unsere aktuelle Untersuchung ist durch die Herausforderungen motiviert, die wir bei der Arbeit mit unserem sicheren Admin Panel erlebt haben. Seit der Einführung verbesserter Sicherheitsmaßnahmen kam es zu Verzögerungen im Entwicklungs- und Testprozess, da bei jeder Dateikompilierung oder jedem Funktionstest auf dem Terminal häufige Anmeldeaufforderungen und Authentifizierungsanfragen gestellt wurden. Diese zusätzliche Sicherheitsebene ist zwar notwendig, hat aber zu Reibungsverlusten in unserem Arbeitsablauf geführt.

Die unten abgebildete Warnung erscheint auf der ersten Seite des Marktes, wenn ein neues Produkt veröffentlicht wird. Er zeigt, wie MQL5 robuste Sicherheitsmaßnahmen zum Schutz von Entwicklern und Nutzern priorisiert und durchsetzt.

Jedes auf dem Markt verkaufte Programm ist mit einem speziellen Schlüssel verschlüsselt, um das Produkt vor illegaler Nutzung zu schützen. Der Verschlüsselungsschlüssel ist für jeden Käufer einzigartig und an seinen Computer gebunden, sodass alle Produkte auf dem Markt einen automatischen Kopierschutz haben.

Das gekaufte Produkt kann mindestens fünfmal aktiviert werden. Dadurch wird der Interessenausgleich zwischen Käufern und Verkäufern gewährleistet. Die Anzahl der verfügbaren Aktivierungen wird vom Verkäufer festgelegt.

Viele Anwendungen und Websites setzen den Schutz der zweiten Schicht selektiv ein und aktivieren ihn nur, wenn verdächtige Aktivitäten festgestellt werden, z. B. anonyme IP-Nutzung, Anmeldeversuche von neuen Geräten oder mehrere fehlgeschlagene Anmeldeversuche. Dieser Ansatz minimiert die Unterbrechungen und gewährleistet gleichzeitig die Sicherheit.

In unserem Fall wird das Testen während der Entwicklung durch die wiederholte Eingabe von Passwörtern und die Überprüfung der Telegram-App auf generierte 6-stellige Codes verzögert. Die häufigen Aufforderungen können lästig werden, insbesondere wenn sie durch Änderungen der Terminalaktivität ausgelöst werden. Im Folgenden sind einige bemerkenswerte Aktivitäten aufgeführt, die zu einer Neuinitialisierung des Geräts und anschließenden Kennwortanforderungen führen:

  • Paarwechsel
  • Zeitrahmenwechsel
  • Terminal-Neustart e.t.c.

In bestimmten Szenarien werden unsere Programme aufgrund unterschiedlicher Aktivitäten wiederholt neu initialisiert - ein Prozess, der aus technischen oder betrieblichen Gründen unvermeidlich ist. Der Algorithmus zur Nutzervalidierung ist in den Beginn der Initialisierungsfunktion eingebettet, sodass das Programm nicht fortfahren kann, ohne diesen Schritt zu durchlaufen. Wir können jedoch einen Umgehungsmechanismus innerhalb der Initialisierungsfunktion einführen, um den Prozess zu optimieren. Dieser Umgehungsalgorithmus überwacht die Anzahl der Anmeldeversuche und ermöglicht so einen reibungslosen Ablauf bei gültigen Sitzungen.

Wenn die Anzahl der fehlgeschlagenen Kennwortversuche den festgelegten Grenzwert überschreitet, signalisiert dies ein verdächtiges Verhalten oder weist darauf hin, dass der ursprüngliche Nutzer sein Kennwort verloren oder vergessen hat. Wird hingegen das richtige Passwort innerhalb von drei Versuchen eingegeben, umgeht das System auf intelligente Weise die 2FA und spart dadurch viel Zeit, da eine wiederholte Authentifizierung über Telegram vermieden wird. Dieser Ansatz erhöht sowohl die Sicherheit als auch die Effizienz, insbesondere während intensiver Entwicklungs- und Testphasen.

Das Bild unten zeigt das Problem der mehrfachen Verifizierungsnachrichten, die während der App-Entwicklung an Telegram gesendet werden, und verdeutlicht den praktischen Bedarf für diesen verfeinerten Algorithmus.

Zu viele 2FA-Eingabeaufforderungen während der Entwicklung und des Testens

Admin Pane: Persönlicher Telegram 2FA-Code-Zustellungsbot

Zuvor waren die wiederholten Aufforderungen zur Passwort- und 2FA-Authentifizierung bei jeder Programminitialisierung extrem zeitaufwändig. Um Zeit bei der Entwicklung zu sparen, habe ich eine Codezeile hinzugefügt, die den 6-stelligen Verifizierungscode, der an Telegram gesendet wird, direkt im Expertenprotokoll des Terminals ausgibt. So konnte ich den Code während des App-Tests schnell aus dem Protokoll abrufen, ohne zur Telegram-App wechseln zu müssen, was den Prozess erheblich vereinfachte.

Das fragliche Codeabschnitt ist Teil der Funktion, die für das Senden von Telegram-Nachrichten zuständig ist. Darin habe ich der Einfachheit halber eine Funktion zur Protokollierung der Nachricht in das Journal aufgenommen. Für diese Entwicklungsphase plane ich jedoch, diese Funktion zu entfernen, um die Sicherheit in zukünftigen Versionen zu erhöhen. Die Offenlegung sensibler Informationen, wie z. B. Verifizierungscodes, im Journal könnte ein Sicherheitsrisiko darstellen, wenn ein unbefugter Zugriff erfolgt. Dieser Schritt spiegelt ein Gleichgewicht zwischen der Optimierung des Entwicklungsprozesses und der Einhaltung von Best Practices zur Sicherung sensibler Daten wider.

Der folgende Codeausschnitt zeigt die Zeile, die die gesendete Nachricht ausgibt.

//+------------------------------------------------------------------+
//| Send the message to Telegram                                     |
//+------------------------------------------------------------------+
bool SendMessageToTelegram(string message, string chatId, string botToken)
{
    string url = "https://api.telegram.org/bot" + botToken + "/sendMessage";
    string jsonMessage = "{\"chat_id\":\"" + chatId + "\", \"text\":\"" + message + "\"}";

    char postData[];
    ArrayResize(postData, StringToCharArray(jsonMessage, postData) - 1);

    int timeout = 5000;
    char result[];
    string responseHeaders;
    int responseCode = WebRequest("POST", url, "Content-Type: application/json\r\n", timeout, postData, result, responseHeaders);

    if (responseCode == 200)
    {
        Print("Message sent successfully: ", message); //This line prints the message in journal,thus a security leak that I used to bypass telegram during app tests.
        return true;
    }
    else
    {
        Print("Failed to send message. HTTP code: ", responseCode, " Error code: ", GetLastError());
        Print("Response: ", CharArrayToString(result));
        return false;
    }
}

Nachfolgend ist eine an Telegram gesendete Nachricht mit dem Verifizierungscode hervorgehoben. Dieser Ansatz war eine bequeme Möglichkeit, die Überprüfung von Telegram auf den Code während der Entwicklung zu umgehen. Die Beibehaltung des Codes stellt jedoch ein erhebliches Sicherheitsrisiko dar, da Unbefugte den Code direkt vom Terminal abrufen könnten, ohne dass sie Zugang zu Telegram benötigen. Der Text wird normalerweise auf der Registerkarte Experten des Terminals gedruckt:

2024.11.22 08:44:47.980 Admin Panel V1.22 (Volatility 75 (1s) Index,M1) Message sent successfully: A login attempt was made on the Admin Panel. Please use this code to verify your identity: 028901 2024.11.22 08:44:48.040 Admin Panel V1.22 (Volatility 75 (1s) Index,M1) Password authentication successful. A 2FA code has been sent to your Telegram.

Ziel der Diskussion:

Das Ziel dieser Diskussion ist die Integration eines Systems zur Erkennung vertrauenswürdiger Nutzer, das die Anmelde- und 2FA-Prozesse rationalisiert. Nutzer, die das richtige Passwort innerhalb von drei Versuchen erfolgreich eingeben, können 2FA umgehen, während das Überschreiten des Limits 2FA auslöst und einen über Telegram gesendeten Code sowie das hartcodierte Passwort zur Wiederherstellung erfordert. Dieses System schafft ein Gleichgewicht zwischen Komfort und Sicherheit, indem es die Anzahl der Wiederholungsversuche begrenzt, um Brute-Force-Angriffe abzuschwächen und gleichzeitig einen reibungslosen Authentifizierungsprozess zu gewährleisten. Vertrauen ist sitzungsspezifisch und muss bei jeder neuen Anmeldung erneut bestätigt werden. Der nächste Abschnitt gibt weitere Einblicke in Maßnahmen zur Bekämpfung von Brute-Force-Angriffen.

Was ist ein Brute-Force-Angriff?

Ein Brute-Force-Angriff ist eine Methode, mit der sich Angreifer unbefugten Zugang zu Konten, Systemen oder verschlüsselten Daten verschaffen, indem sie systematisch alle möglichen Kombinationen von Kennwörtern, Verschlüsselungsschlüsseln oder Anmeldeinformationen ausprobieren, bis die richtige gefunden wird. Dieser Ansatz beruht auf Rechenleistung und Ausdauer und nicht auf der Ausnutzung von Schwachstellen im System selbst.

Hauptmerkmale eines Brute-Force-Angriffs:

  • Versuch und Irrtum: Der Angreifer versucht wiederholt verschiedene Zeichenkombinationen, bis er sich Zugang verschafft.
  • Automatisierung: Zur Automatisierung des Prozesses werden häufig spezielle Tools oder Skripte eingesetzt, die Tausende oder sogar Millionen von Versuchen in kurzer Zeit ermöglichen.
  • Zeitintensiv: Die benötigte Zeit hängt von der Komplexität des Zielpassworts oder -schlüssels ab. Bei stärkeren Passwörtern mit mehr Zeichen und verschiedenen Kombinationen dauert es wesentlich länger, sie zu knacken.

Arten von Brute-Force-Angriffen:

  1. Simple Brute Force: Ausprobieren aller möglichen Zeichenkombinationen.
  2. Dictionary Attack: Verwendung einer Liste von häufig verwendeten Kennwörtern (z. B. „123456“, „password“ oder „qwerty“) für den Zugriffsversuch.
  3. Credential Stuffing: Verwendung von durchgesickerten Nutzernamen-Kennwort-Paaren aus anderen Sicherheitsverletzungen, um Zugang zu Konten auf verschiedenen Plattformen zu erhalten.

Prävention:

  • Begrenzung der Anmeldeversuche.
  • Erzwingen Sie starke Passwörter (lang, mit einer Mischung aus Großbuchstaben, Kleinbuchstaben, Zahlen und Symbolen).
  • Implementierung der Zwei-Faktor-Authentifizierung (2FA), um eine weitere Sicherheitsebene zu schaffen.

Die derzeitige Sicherheit für Panel Access ist anfällig für den erwähnten Angriff, und während die Begrenzung der Anmeldeversuche ein wichtiger Schritt ist, wollen wir auch häufige Authentifizierungen über Telegram vermeiden, um Zeit zu sparen. Das Senden des Verifizierungscodes dient dem Schutz vor unbefugtem Zugriff und warnt den echten Administrator vor potenziell bösartigen Aktivitäten auf dem Panel, sodass er vor Sicherheitsverletzungen geschützt ist.


Implementierung eines vertrauenswürdigen Nutzers im Admin Panel

Um die neue Funktion im Admin-Bereich zu implementieren, haben wir nur einige wenige Abschnitte unseres Quellcodes geändert, die sich auf die Sicherheit und die Initialisierung des EA-Programms beziehen. Dieser Ansatz stellt sicher, dass der Rest des Programms unverändert bleibt, wodurch das Fehlerrisiko bei der Verwaltung eines großen Codes minimiert wird. Der Schwerpunkt liegt hier auf der Funktion der Login-Behandlung, und wir haben neue Variablen eingeführt, die im nächsten Codeabschnitt deklariert werden.

int failedAttempts = 0; // Counter for failed login attempts
bool isTrustedUser = false; // Flag for trusted users

Die globalen Variablen failedAttempts und isTrustedUser sind für die Implementierung der neuen Funktionen von entscheidender Bedeutung. failedAttempts überwacht die Anzahl der falschen Kennworteingaben und hilft bei der Bestimmung, wann 2FA erzwungen werden sollte. Das Flag isTrustedUser erkennt Nutzer, die sich innerhalb der zulässigen Versuche erfolgreich anmelden, und überspringt den 2FA-Prozess für diese Nutzer. Indem diese Variablen in der Funktion OnLoginButtonClick entsprechend zurückgesetzt werden, behält das System die dynamische Kontrolle über den Authentifizierungsablauf und gewährleistet Flexibilität und Sicherheit.

Verbesserung der Login-Funktion für die neuen Funktionen

Die Funktion OnLoginButtonClick integriert die neuen Funktionen, indem sie Anmeldeversuche mit dem Zähler failedAttempts verfolgt und vertrauenswürdige Nutzer mit dem Flag isTrustedUser identifiziert. Wenn ein korrektes Passwort eingegeben wird, wird geprüft, ob der Nutzer als vertrauenswürdig eingestuft werden kann, da er weniger als drei Fehlversuche hat. Vertrauenswürdige Nutzer überspringen den 2FA-Schritt und gehen direkt zum Admin Home Panel. Wenn die Fehlversuche das Limit überschreiten, generiert die Funktion einen 2FA-Code, sendet ihn zusammen mit dem hartkodierten Passwort zur Wiederherstellung an den Nutzer über Telegram und zeigt die 2FA-Authentifizierungsaufforderung an. Dies gewährleistet ein Gleichgewicht zwischen der Nutzerfreundlichkeit für vertrauenswürdige Nutzer und der erzwungenen Sicherheit nach Fehlversuchen.

//+------------------------------------------------------------------+
//| Handle login button click                                        |
//+------------------------------------------------------------------+

 void OnLoginButtonClick()
{
    string enteredPassword = passwordInputBox.Text();
    
    if (enteredPassword == Password)
    {
        failedAttempts = 0; // Reset attempts on successful login
        isTrustedUser = true;

        if (failedAttempts <= 3) // Skip 2FA for trusted users
        {
            authentication.Destroy();
            adminHomePanel.Show();
            Print("Login successful. 2FA skipped for trusted user.");
        }
        else
        {    
           
        }
    }
    else
    {
        failedAttempts++;
        feedbackLabel.Text("Wrong password. Try again.");
        passwordInputBox.Text("");

        if (failedAttempts >= 3)
        {
        
            Print("Too many failed attempts. 2FA will be required.");
            
            twoFACode = GenerateRandom6DigitCode();
            SendMessageToTelegram(
                "A login attempt was made on the Admin Panel.\n" +
                "Use this code to verify your identity: " + twoFACode + "\n" +
                "Reminder: Your admin password is: " + Password,
                Hardcoded2FAChatId, Hardcoded2FABotToken
            );
            authentication.Destroy();

            ShowTwoFactorAuthPrompt();
            Print("Password authentication successful. A 2FA code has been sent to your Telegram.");
            failedAttempts = 0; // Reset attempts after requiring 2FA
        }
    }
}

Fünf Instanzen während der Programminitialisierung

Der Authentifizierungsprozess, einschließlich der neuen Funktionen zum Überspringen von 2FA, wird während der Initialisierung wirksam, da die Funktion ShowAuthenticationPrompt() die Anmeldeschnittstelle anzeigt, in der der OnLoginButtonClick-Handler mit der Schaltfläche „Login“ verknüpft ist. So funktioniert es Schritt für Schritt:

  1. Auslösen der Authentifizierungsaufforderung: In der Funktion OnInit() wird zuerst ShowAuthenticationPrompt() aufgerufen. Diese Funktion erstellt und zeigt den Authentifizierungsdialog mit dem Passwort-Eingabefeld und der Schaltfläche „Login“ an. Das Programm hält die weitere Ausführung an, bis der Nutzer mit dem Dialog interagiert.
  2. Behandlung von Anmeldeversuchen: Wenn der Nutzer auf die Schaltfläche „Login“ klickt, wird die Funktion OnLoginButtonClick ausgeführt. Diese Funktion prüft das eingegebene Kennwort, aktualisiert den Zähler failedAttempts und bestimmt anhand der Anzahl der Fehlversuche, ob der Zugang direkt gewährt oder 2FA erzwungen werden soll.
  3. Weiteres Vorgehen nach erfolgreicher Authentifizierung: Wenn die Anmeldung erfolgreich ist und der Nutzer als vertrauenswürdiger Nutzer eingestuft wird (weniger als drei Fehlversuche), wird der Authentifizierungsdialog abgebrochen und sofort das Admin Home Panel angezeigt. Dadurch wird die 2FA für vertrauenswürdige Nutzer umgangen.
  4. Erforderlichenfalls 2FA verlangen: Überschreitet der Nutzer die Anzahl der zulässigen Fehlversuche, erzwingt das Programm 2FA. Ein 6-stelliger Code wird generiert und über Telegram gesendet, und der 2FA-Authentifizierungsdialog wird über die FunktionShowTwoFactorAuthPrompt() angezeigt. Erinnern Sie sich an die rot hervorgehobene Funktion zur Erzeugung unseres Zahlencodes.
//+------------------------------------------------------------------+
//| Generate a random 6-digit code for 2FA                           |
//+------------------------------------------------------------------+
string GenerateRandom6DigitCode()
{
    int code = MathRand() % 1000000; // Generate a 6-digit number
    return StringFormat("%06d", code); // Ensure leading zeros
}

    5.  Weitere Initialisierung: Sobald der Nutzer authentifiziert ist (entweder über eine vertrauenswürdige Anmeldung oder eine erfolgreiche 2FA), werden die übrigen Panels (Admin Home Panel, Communications Panel, Trade Management Panel) im Hintergrund initialisiert, bleiben aber ausgeblendet, bis sie bei der Navigation explizit angezeigt werden.

Hier ist der Codeausschnitt der Initialisierungsfunktion:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
    if (!ShowAuthenticationPrompt())
    {
        Print("Authorization failed. Exiting...");
        return INIT_FAILED;
    }

    if (!adminHomePanel.Create(ChartID(), "Admin Home Panel", 0, 30, 30, 500, 500))
    {
        Print("Failed to create Admin Home Panel");
        return INIT_FAILED;
    }

    if (!CreateAdminHomeControls())
    {
        Print("Home panel control creation failed");
        return INIT_FAILED;
    }

    if (!communicationsPanel.Create(ChartID(), "Communications Panel", 0, 30, 30, 500, 500))
    {
        Print("Failed to create Communications panel dialog");
        return INIT_FAILED;
    }

    if (!tradeManagementPanel.Create(ChartID(), "Trade Management Panel", 0,260, 30, 1040, 170))
    {
        Print("Failed to create Trade Management panel dialog");
        return INIT_FAILED;
    }

    if (!CreateControls())
    {
        Print("Control creation failed");
        return INIT_FAILED;
    }

    if (!CreateTradeManagementControls())
    {
        Print("Trade management control creation failed");
        return INIT_FAILED;
    }

    adminHomePanel.Hide(); // Hide home panel by default on initialization
    communicationsPanel.Hide(); // Hide the Communications Panel
    tradeManagementPanel.Hide(); // Hide the Trade Management Panel
    return INIT_SUCCEEDED;
}


Kryptographie und Beispiele für die Anwendung im Admin Panel

Die Kryptografie in MQL5 umfasst die Verwendung von Algorithmen und Methoden zur Sicherung sensibler Daten wie Passwörter, Nachrichten oder Authentifizierungscodes.

Im Folgenden finden Sie vier Methoden für die Anwendung des Konzepts in der Verwaltungskonsole.

1. Das Hashen von Passwörtern

  • Die Funktion HashPassword verwendet die Funktion CryptEncode mit dem Algorithmus CRYPT_HASH_SHA256, um das Eingabekennwort zu hashen. Das Hash-Ergebnis wird mit CharArrayToHex zur Speicherung oder zum Vergleich in eine hexadezimale Zeichenkette umgewandelt. In der Funktion VerifyPassword wird das eingegebene Kennwort gehasht und mit dem gespeicherten Hashwert verglichen, um sicherzustellen, dass keine Klartextkennwörter gespeichert oder verarbeitet werden.
  • Die Speicherung von gehashten Kennwörtern gewährleistet, dass selbst bei einem Zugriff auf die gespeicherten Daten die eigentlichen Kennwörter sicher bleiben. Hashing ist ein Einwegverfahren, d. h. das ursprüngliche Passwort kann nicht aus dem Hash abgeleitet werden, was eine wesentliche Sicherheitsebene für die Authentifizierung darstellt.
// Example for storing our hard-coded password

string HashPassword(string password)
{
    uchar hash[];
    CryptEncode(CRYPT_HASH_SHA256, password, hash);
    return CharArrayToHex(hash);
}

// Usage
string PasswordHash = HashPassword("2024"); // Store this instead of plaintext
bool VerifyPassword(string enteredPassword)
{
    return HashPassword(enteredPassword) == PasswordHash;
}

2. Verschlüsseln sensibler Daten

  • Die Funktion EncryptData verwendet den Algorithmus AES-256 (CRYPT_AES256), um sensible Informationen wie 2FA-Codes mit einem sicheren Verschlüsselungsschlüssel zu verschlüsseln. Die Funktion DecryptData kehrt diesen Prozess um und entschlüsselt die Daten wieder in ihre ursprüngliche Form. Der Schlüssel ist in diesem Prozess von entscheidender Bedeutung, da er bei der Verschlüsselung und Entschlüsselung übereinstimmen muss.

  • Die Verschlüsselung schützt sensible Daten während der Speicherung oder Übertragung. Wenn beispielsweise der 2FA-Code während der Kommunikation abgefangen wird, stellt die verschlüsselte Version sicher, dass unbefugte Nutzer ihn nicht ohne den richtigen Schlüssel interpretieren können.
//Example for encryption of our 2FA verification code
string EncryptData(string data, string key)
{
    uchar encrypted[];
    CryptEncode(CRYPT_AES256, data, encrypted, StringToCharArray(key));
    return CharArrayToHex(encrypted);
}

string DecryptData(string encryptedData, string key)
{
    uchar decrypted[];
    uchar input[];
    StringToCharArray(encryptedData, input);
    CryptDecode(CRYPT_AES256, input, decrypted, StringToCharArray(key));
    return CharArrayToString(decrypted);
}

// Usage
string key = "StrongEncryptionKey123"; // Use a secure key
string encrypted2FA = EncryptData(twoFACode, key);
Print("Encrypted 2FA code: ", encrypted2FA);

3. Sichere Zufallszahlengenerierung für 2FA

  • Die Funktion GenerateSecureRandom6DigitCode verwendet die Funktion CryptEncode mit dem Algorithmus CRYPT_HASH_SHA256, um eine kryptografisch sichere Zufallsfolge zu erzeugen. Das Ergebnis wird dann durch modulare Arithmetik und Formatierung in eine 6-stellige Zahl umgewandelt.

  • Standard-Zufallsfunktionen wie MathRand sind pseudozufällig und vorhersehbar. Die Verwendung von kryptografischen Zufallszahlen gewährleistet, dass 2FA-Codes sicher und resistent gegen Vorhersage- oder Brute-Force-Angriffe sind, was die Sicherheit des Authentifizierungsprozesses erhöht.
// Example for generating a secure verification code
string GenerateSecureRandom6DigitCode()
{
    uchar randomBytes[3];
    CryptEncode(CRYPT_HASH_SHA256, MathRand(), randomBytes); // Use CryptEncode for randomness
    int randomValue = (randomBytes[0] << 16) | (randomBytes[1] << 8) | randomBytes[2];
    randomValue = MathAbs(randomValue % 1000000); // Ensure 6 digits
    return StringFormat("%06d", randomValue);
}

4. Sichere Kommunikation mit Telegram

  • Die Funktion SendEncryptedMessageToTelegram verschlüsselt die Nachricht mit der Funktion EncryptData, bevor sie über die Funktion SendMessageToTelegram an den Telegram-Server übertragen wird. Die verschlüsselte Nachricht kann nur von jemandem entschlüsselt werden, der den richtigen Entschlüsselungscode hat.

  • Die Verschlüsselung der Kommunikation gewährleistet die Vertraulichkeit sensibler Informationen, wie z. B. 2FA-Codes, selbst wenn die Übertragung abgefangen wird. Dies ist besonders wichtig bei der Nutzung von Kommunikationsplattformen von Drittanbietern, bei denen die Daten möglicherweise nicht vollständig sicher sind.

//Example of the securely sending to Telegram

bool SendEncryptedMessageToTelegram(string message, string chatId, string botToken, string key)
{
    string encryptedMessage = EncryptData(message, key);
    return SendMessageToTelegram(encryptedMessage, chatId, botToken);
}

// Usage
string key = "StrongEncryptionKey123";
SendEncryptedMessageToTelegram("Your 2FA code is: " + twoFACode, Hardcoded2FAChatId, Hardcoded2FABotToken, key);


Tests

In diesem Stadium werden wir die Ergebnisse unserer Sicherheitsverbesserungen im Admin Panel präsentieren. Das Update vereinfacht den Anmeldeprozess für vertrauenswürdige Nutzer, die damit schnell auf das Panel zugreifen können, während nicht vertrauenswürdige Nutzer eine zweite Überprüfung ihrer Authentizität vornehmen müssen. Wenn ein Nutzer sein Passwort vergisst, kann er es über den Authentifizierungsprozess wiederherstellen.

Im nachstehenden Expertenprotokoll werden die fehlgeschlagenen Anmeldeversuche angezeigt, gefolgt von einem Bild, das den Anmeldevorgang veranschaulicht

2024.11.22 03:53:59.675 Admin Panel V1.23 (Volatility 75 (1s) Index,M2) Too many failed attempts. 2FA will be required.
2024.11.22 03:54:00.643 Admin Panel V1.23 (Volatility 75 (1s) Index,M2) Message sent successfully: Check your telegram for verification code and Password
2024.11.22 03:54:00.646 Admin Panel V1.23 (Volatility 75 (1s) Index,M2) Password authentication successful. A 2FA code has been sent to your Telegram.
2024.11.22 03:54:22.946 Admin Panel V1.23 (Volatility 75 (1s) Index,M2) 2FA authentication successful. Access granted to Admin Home Panel.

Telegrammnachricht zur Überprüfung gesendet

Eine zur Überprüfung gesendete Telegram-Nachricht

Fehlgeschlagene Anmeldeversuche am Admin Panel

Verwaltungsbereich: Fehlgeschlagene Anmeldeversuche

Für vertrauenswürdige Nutzer ist das Anmeldeverfahren unkompliziert. Sie können den zweiten Verifizierungsschritt umgehen und so ihren Zugang zum Verwaltungsbereich vereinfachen. Nachfolgend sehen Sie das Expertenprotokoll, das die erfolgreiche Anmeldung für vertrauenswürdige Nutzer anzeigt, gefolgt von einem Bild, das den einfachen Prozess für diejenigen veranschaulicht, die das richtige Passwort eingeben.
2024.11.22 03:57:41.563 Admin Panel V1.23 (Volatility 75 (1s) Index,M2) Login successful. 2FA skipped for trusted user.


Vertrauenswürdiger Nutzer - einfache Anmeldung mit Passwort

Admin Panel: Vertrauenswürdiger Nutzer - erfolgreiche Anmeldung mit Passwort


Schlussfolgerung

Im Rahmen dieser Diskussion über die Verbesserung des Admin Panels haben wir sowohl bei der Funktionalität als auch bei der Sicherheit erhebliche Fortschritte gemacht. Die Einführung einer Funktion für vertrauenswürdige Nutzer ermöglicht ein reibungsloseres und effizienteres Anmeldeerlebnis für bekannte Nutzer, indem die Anmeldeversuche auf drei begrenzt werden und 2FA bei erfolgreicher Authentifizierung innerhalb dieser Schwelle umgangen wird. Dieser Ansatz schafft ein Gleichgewicht zwischen Sicherheit und Nutzerfreundlichkeit, indem er die Reibungsverluste für legitime Nutzer verringert und gleichzeitig strenge Zugangskontrollmaßnahmen für nicht vertrauenswürdige Versuche aufrechterhält.

Wir haben auch das Potenzial der Kryptographie zur Stärkung des Sicherheitsrahmens des Panels untersucht. Durch das Hashen von Passwörtern, Verschlüsseln sensibler Daten und sichere Zufallszahlengenerierung für 2FA-Codes konnten wir die Integrität und Vertraulichkeit wichtiger Informationen sicherstellen. Das Hashen schützt gespeicherte Kennwörter vor unbefugtem Zugriff, während die Verschlüsselung sensible Daten bei der Übertragung oder Speicherung schützt. Darüber hinaus gewährleistet der kryptografisch gesicherte Zufall die Unvorhersehbarkeit der generierten Codes, was einen zusätzlichen Schutz gegen Brute-Force-Angriffe darstellt.

Diese Fortschritte tragen dazu bei, dass wir ein nutzerfreundliches und sicheres Verwaltungsinstrument für die Verwaltung der Handelskommunikation und -vorgänge bereitstellen können. Indem wir uns sowohl mit der Funktionalität als auch mit der Sicherheit befassen, schaffen wir die Voraussetzungen für künftige Verbesserungen, die die Arbeitsabläufe weiter optimieren und gleichzeitig die höchsten Datenschutzstandards einhalten können.

Zurück zum Inhalt

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16339

Beigefügte Dateien |
Datenwissenschaft und ML (Teil 32): KI-Modelle auf dem neuesten Stand halten, Online-Lernen Datenwissenschaft und ML (Teil 32): KI-Modelle auf dem neuesten Stand halten, Online-Lernen
In der sich ständig verändernden Welt des Handels ist die Anpassung an Marktveränderungen nicht nur eine Option, sondern eine Notwendigkeit. Täglich entstehen neue Muster und Trends, die es selbst den fortschrittlichsten Modellen für maschinelles Lernen erschweren, angesichts der sich verändernden Bedingungen effektiv zu bleiben. In diesem Artikel erfahren Sie, wie Sie Ihre Modelle durch ein automatisches Neu-Training relevant halten und auf neue Marktdaten reagieren können.
MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 47): Verstärkungslernen mit Temporaler Differenz MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 47): Verstärkungslernen mit Temporaler Differenz
Temporal Difference ist ein weiterer Algorithmus des Reinforcement Learning, der Q-Werte auf der Grundlage der Differenz zwischen vorhergesagten und tatsächlichen Belohnungen während des Agententrainings aktualisiert. Sie befasst sich speziell mit der Aktualisierung von Q-Werten, ohne sich um die Verknüpfung von Zustand und Aktion zu kümmern. Daher wollen wir sehen, wie wir dies, wie in früheren Artikeln, in einem mit einem Assistenten zusammengestellten Expert Advisor anwenden können.
Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 2):  Ein Script für analytische Kommentare Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 2): Ein Script für analytische Kommentare
Im Einklang mit unserer Vision, das Preisgeschehen zu vereinfachen, freuen wir uns, Ihnen ein weiteres Tool vorstellen zu können, das Ihre Marktanalyse erheblich verbessern und Ihnen helfen kann, gut informierte Entscheidungen zu treffen. Dieses Tool zeigt wichtige technische Indikatoren an, wie z. B. die Kurse des Vortags, wichtige Unterstützungs- und Widerstandsniveaus und das Handelsvolumen, und generiert automatisch visuelle Hinweise auf dem Chart.
Handelseinblicke durch Volumen: Mehr als OHLC-Charts Handelseinblicke durch Volumen: Mehr als OHLC-Charts
Ein algorithmisches Handelssystem, das die Volumenanalyse mit Techniken des maschinellen Lernens, insbesondere neuronalen LSTM-Netzen, kombiniert. Im Gegensatz zu traditionellen Handelsansätzen, die sich in erster Linie auf Preisbewegungen konzentrieren, legt dieses System den Schwerpunkt auf Volumenmuster und deren Ableitungen, um Marktbewegungen vorherzusagen. Die Methodik umfasst drei Hauptkomponenten: Analyse der Volumenderivate (erste und zweite Ableitung), LSTM-Vorhersagen für Volumenmuster und traditionelle technische Indikatoren.