Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    crittografare alcuni campi di un database di una webapp PHP

    Ciao, ho una webapp PHP collegata ad un db sql. Ho la necessità di crittografare con AES alcuni campi di alcune tabelle e ho visto che ci sono diverse possibilità, posso usare l'apposita funzione php per far arrivare i dati già cifrati al db, oppure possono usare un trigger direttamente sul db e fin qui ok.

    Il mio dubbio è qual'è il modo più sicuro per conservare la chiave di cifratura.

    Ovviamente la posso inserire in chiaro nei file php ogni volta che devo lanciare un encrypt o decrypt ad esempio, ma questo metodo è effettivamente sicuro o posso fare di meglio?

    Grazie

  2. #2
    Sto un pochino approfondendo e ho visto che se uso PHP per cifrare e decifrare con le funzioni openssl_encrypt e openssl_decrypt, oltre alla chiave va salvato un vettore di inizializzazione e un tag quindi tre elementi.
    Riguardo la riusabilità della chiave non viene specificato nulla, ma per il vettore e il tag ho letto in rete di cambiarli ogni volta che si cifra un nuovo dato (vanno generati ogni volta con i relativi metodi).

    Ora, tutti sti dati dove è opportuno che vengano conservati per avere un alto livello di sicurezza?

  3. #3
    Ciao.
    Dunque, le varie info di criptazione e decriptazione le puoi tranquillamente salvare in un file di configurazione, anche php, tanto il "codice" dietro non lo può vedere nessuno, a meno che abbia accesso al file system. Se provasse ad accedere al file di configurazione "grezzo" via internet, il server web (apache, per capirci) lo interpreta come php e quindi non vedi il contenuto ma il "risultato". Ovviamente essendo un file di configurazione, non avrai alcun output nel browser.
    Io personalmente uso queste due funzioni
    codice:
    
    function cript_high_security($string){
        $obj = get_instance();
        // Encription Key, Private Key, Digest
        $private_key = $obj->config->config["encryption_private_key"]; // es recaptcha priv key
        $enc_key = $obj->config->config["encryption_key"]; // es "cnesnvfei[453v"
        $digest = $obj->config->config["encryption_digest"]; // es AES256
        // Get max digest len
        $ivlen = openssl_cipher_iv_length($digest);
        $iv = substr(md5($private_key), 0, $ivlen);
        /* Create key */
        $key = md5($enc_key);
        $ciphertext = openssl_encrypt($string, $digest, $key, $options=0, $iv);
        /* return encripted data */
        $ciphertext = str_replace("/", "_-_-_", $ciphertext);
        return $ciphertext;
    }
    
    
    function decript_high_security($string){
        $obj = get_instance();
        // Encription Key, Private Key, Digest
        $private_key = $obj->config->config["encryption_private_key"]; // es recaptcha priv key
        $enc_key = $obj->config->config["encryption_key"]; // es "cnesnvfei[453v"
        $digest = $obj->config->config["encryption_digest"]; // es AES256
        // Get max digest len
        $ivlen = openssl_cipher_iv_length($digest);
        $iv = substr(md5($private_key), 0, $ivlen);
        /* Create key */
        $key = md5($enc_key);
        $string = str_replace("_-_-_", "/", $string);
        $original_plaintext = openssl_decrypt($string, $digest, $key, $options=0, $iv);
        return $original_plaintext;
    }
    E ovviamente nel file di configurazione ho, come prima riga,
    Codice PHP:
    if (! defined'BASEPATH' ))    exit( 'No direct script access allowed' ); 
    Il replace delle barre con quel "robo" "_-_-_" lo faccio perchè altrimenti mi crea problemi nel caso la parte criptata la debba usare come parte di indirizzo html (es: pippo.com/Visualizza_File/stringaCriptata. Se stringa criptata fosse non pulita, potrei avere pippo.com/Visualizza_File/87hadea/jfewfefo/rerer e diventerebbe complicato tornare indietro)

    Quindi, ricapitolando, le encryption_private_key, encryption_key e encryption_digest le puoi mettere in un file di configurazione senza problemi

  4. #4
    ciao, grazie dei preziosi consigli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.