Logowanie z użyciem technik bezpieczeństwa (np. ochrona logów przed modyfikacją)

Założenie: Nauczymy się, jak zabezpieczyć logi przed nieautoryzowaną modyfikacją za pomocą cyfrowych podpisów.

Krok po kroku:

  1. Generowanie kluczy RSA: Do zabezpieczenia logów wykorzystamy asymetryczne szyfrowanie RSA. Najpierw musimy wygenerować parę kluczy – publiczny i prywatny. W PHP możemy użyć do tego funkcji OpenSSL.
    
    $config = array(
        "digest_alg" => "sha512",
        "private_key_bits" => 2048,
        "private_key_type" => OPENSSL_KEYTYPE_RSA,
    );
    
    $res = openssl_pkey_new($config);
    
    openssl_pkey_export($res, $privateKey);
    openssl_pkey_get_details($res, $details);
    $publicKey = $details["key"];
    
    file_put_contents('private.key', $privateKey);
    file_put_contents('public.key', $publicKey);
    				

    Ten kod generuje parę kluczy i zapisuje je do plików `private.key` i `public.key`. **Nigdy nie udostępniaj klucza prywatnego!**

  2. Podpisywanie logu: Po utworzeniu logu, podpisujemy go używając klucza prywatnego.
    
    $log = "To jest mój log.";
    openssl_sign($log, $signature, openssl_pkey_get_private(file_get_contents('private.key')), OPENSSL_ALGO_SHA512);
    $logWithSignature = $log . '|' . base64_encode($signature);
    file_put_contents('log.txt', $logWithSignature);
    				

    Tutaj podpisujemy zmienną `$log` i dodajemy podpis do samego logu, oddzielając go znakiem ‘|’.

  3. Weryfikacja podpisu: Przed odczytaniem logu, weryfikujemy jego podpis używając klucza publicznego.
    
    $logWithSignature = file_get_contents('log.txt');
    list($log, $signature) = explode('|', $logWithSignature);
    $signature = base64_decode($signature);
    
    $verified = openssl_verify($log, $signature, openssl_pkey_get_public(file_get_contents('public.key')), OPENSSL_ALGO_SHA512);
    
    if ($verified == 1) {
        echo "Podpis poprawny. Log: " . $log;
    } else {
        echo "Podpis nieprawidłowy!";
    }
    				

    Ten kod sprawdza, czy podpis jest poprawny. Jeśli nie, oznacza to, że log został zmodyfikowany.

Pamiętaj, że to tylko podstawowy przykład. W rzeczywistych aplikacjach należy używać bardziej zaawansowanych technik bezpieczeństwa.

Ten przykład pokazuje podstawowe techniki zabezpieczania logów przed modyfikacją. Zachęcamy do dalszego zgłębiania tematu bezpieczeństwa w PHP!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *