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:
- 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!**
- 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 ‘|’.
- 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!