Sicurezza nel repository GitHub, proteggendo le chiavi API

Un esempio di come la programmazione possa essere modificata per condividere sul repository GitHub un progetto che deve accedere a dati sensibili

Sicurezza nel repository GitHub, proteggendo le chiavi API

Come ti ho mostrato nel post precedente, il codice così scritto:

<?php

// This is the main Web application configuration.

 

$options = array(

‘db’=>array(

    ‘connectionString’ => ‘mysql:host=localhost;dbname=mydatabase’,

    ‘emulatePrepare’ => true,

    ‘username’ => ‘jeff’,

    ‘password’ => ‘whitefoxesjumpfences’,

    ‘charset’ => ‘utf8’,

    ‘tablePrefix’=>’fox_’,

),

// application-level parameters that can be accessed

// using Yii::app()->params[‘paramName’]

‘params’=>array(

  ‘pushover’=> array(

    ‘key’=> ‘H75EAC19M3249!X2’,

  ),

  ‘google’=> array(

    ‘maps_api_key’ => ‘W69uHsUJZBPhsFNExykbQceK’,

  ),

),

);

?>

 

mette a rischio la sicurezza del tuo account rendendo visibili a chiunque acceda al tuo repository GitHub le credenziali di accesso e le API del servizio cloud integrato nel tuo progetto.

In realtà, quello che ti voglio proporre è di creare un file del tipo config.ini da posizionare all’esterno del repository GitHub e che potrebbe assomigliare a questo:

mysql_host=”http://host33663.rds.amazon-aws.com”

mysql_un=”amzn-app-db7293″

mysql_db=”rds-foxesandfences-db”

mysql_pwd=”K*$1x7B32auiWX91″

pushover_key = “H75EAC19M3249!X2”

google_maps_api_key=”W69uHsUJZBPhsFNExykbQceK”

Poi, dovresti modificare il file originario, quello mostrato all’inizio del pezzo, nel seguente modo:

<?php

$config = parse_ini_file(‘/outside/webserver/config.ini’, true);

// This is the main Web application configuration.

 

$options = array(

‘db’=>array(

    ‘connectionString’ => ‘mysql:host=’.$config[‘mysql_host’].’;dbname=’.$config[‘mysql_db’],

    ‘emulatePrepare’ => true,

    ‘username’ => $config[‘mysql_un’],

    ‘password’ => $config[‘mysql_pwd’],

    ‘charset’ => ‘utf8’,

    ‘tablePrefix’=>’fox_’,

),

// application-level parameters that can be accessed

// using Yii::app()->params[‘paramName’]

‘params’=>array(

    ‘pushover’=> array(

      ‘key’=> $config[‘pushover_key’],

    ),

    ‘google’=> array(

      ‘maps_api_key’ => $config[‘google_maps_api_key’],

    ),

),

);

>?

In questo modo, hai un metodo per salvaguardare i tuoi dati e gestire gli accessi API e le credenziali su repository GitHub senza difficoltà.

Come funziona il file per proteggere le chiavi sul repository GitHub

In pratica, le credenziali sono state spostate in un file a parte. Nel file originario è stato effettuato il parsing del file con estensione INI e il risultato è stato assegnato alla variabile config.

Quando necessario, i dati memorizzati nella variabile config vengono richiamati semplicemente dichiarando il nome della variabile e il nome del dato a cui si vuole accedere. Il dato in questione può essere un qualsiasi parametro, come una chiave API, uno username, una password e qualsiasi altra tipologia di dato sensibile che decidi di proteggere.

Questo approccio dovrebbe essere usato anche dagli amministratori WordPress. In questo CMS, infatti, le chiavi API utilizzate dai plugin comuni vengono conservate in chiaro nel database di WordPress stesso. Il consiglio è quello di mantenere sempre aggiornati WordPress e i vari plugin per evitare che queste chiavi possano venir compromesse da questa tipologia di limite della piattaforma.

Ovviamente, oltre a quello fin qui suggerito, esistono altre tipologie di approcci e non è detto che siano meno validi. Questo è forse però il più semplice da trattare e lavorare, anche per la semplicità con cui è possibile richiamare i dati di cui si ha necessità per il corretto funzionamento del progetto.