mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-06 09:38:23 +01:00
Experimental: add function to encrypt sensitive data in database
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||||
* Copyright (C) 2005-2007 Regis Houssin <regis@dolibarr.fr>
|
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -72,10 +72,10 @@ class DoliDb
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Ouverture d'une connexion vers le serveur et <EFBFBD>ventuellement une database.
|
\brief Ouverture d'une connexion vers le serveur et eventuellement une database.
|
||||||
\param type Type de base de donn<EFBFBD>es (mysql ou pgsql)
|
\param type Type de base de donnees (mysql ou pgsql)
|
||||||
\param host Addresse de la base de donn<EFBFBD>es
|
\param host Addresse de la base de donnees
|
||||||
\param user Nom de l'utilisateur autoris<EFBFBD>
|
\param user Nom de l'utilisateur autorise
|
||||||
\param pass Mot de passe
|
\param pass Mot de passe
|
||||||
\param name Nom de la database
|
\param name Nom de la database
|
||||||
\param port Port of database server
|
\param port Port of database server
|
||||||
@@ -581,7 +581,7 @@ class DoliDb
|
|||||||
* \param test chaine test
|
* \param test chaine test
|
||||||
* \param resok resultat si test egal
|
* \param resok resultat si test egal
|
||||||
* \param resko resultat si test non egal
|
* \param resko resultat si test non egal
|
||||||
* \return string chaine format<EFBFBD> SQL
|
* \return string chaine formate SQL
|
||||||
*/
|
*/
|
||||||
function ifsql($test,$resok,$resko)
|
function ifsql($test,$resok,$resko)
|
||||||
{
|
{
|
||||||
@@ -690,8 +690,8 @@ class DoliDb
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief R<EFBFBD>cup<EFBFBD>re l'id gen<EFBFBD>r<EFBFBD> par le dernier INSERT.
|
\brief Recupere l'id genere par le dernier INSERT.
|
||||||
\param tab Nom de la table concern<EFBFBD>e par l'insert. Ne sert pas sous MySql mais requis pour compatibilit<EFBFBD> avec Postgresql
|
\param tab Nom de la table concernee par l'insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql
|
||||||
\return int id
|
\return int id
|
||||||
*/
|
*/
|
||||||
function last_insert_id($tab)
|
function last_insert_id($tab)
|
||||||
@@ -704,7 +704,57 @@ class DoliDb
|
|||||||
// Next function are not required. Only minor features use them.
|
// Next function are not required. Only minor features use them.
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Encrypt sensitive data in database
|
||||||
|
* \param field Field name to encrypt
|
||||||
|
* \param cryptType Type of encryption (2: AES (recommended), 1: DES , 0: no encryption)
|
||||||
|
* \param cryptKey Encryption key
|
||||||
|
* \return return Field to encrypt if used
|
||||||
|
*/
|
||||||
|
function encrypt($field, $cryptType=0, $cryptKey='')
|
||||||
|
{
|
||||||
|
$return = $field;
|
||||||
|
|
||||||
|
if ($cryptType && !empty($cryptKey))
|
||||||
|
{
|
||||||
|
if ($cryptType == 2)
|
||||||
|
{
|
||||||
|
$return = 'AES_ENCRYPT('.$field.',\''.$cryptKey.'\')';
|
||||||
|
}
|
||||||
|
else if ($cryptType == 1)
|
||||||
|
{
|
||||||
|
$return = 'DES_ENCRYPT('.$field.',\''.$cryptKey.'\')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Decrypt sensitive data in database
|
||||||
|
* \param field Field name to decrypt
|
||||||
|
* \param cryptType Type of encryption (2: AES (recommended), 1: DES , 0: no encryption)
|
||||||
|
* \param cryptKey Encryption key
|
||||||
|
* \return return Field to decrypt if used
|
||||||
|
*/
|
||||||
|
function decrypt($field, $cryptType=0, $cryptKey='')
|
||||||
|
{
|
||||||
|
$return = $field;
|
||||||
|
|
||||||
|
if ($cryptType && !empty($cryptKey))
|
||||||
|
{
|
||||||
|
if ($cryptType == 2)
|
||||||
|
{
|
||||||
|
$return = 'AES_DECRYPT('.$field.',\''.$cryptKey.'\')';
|
||||||
|
}
|
||||||
|
else if ($cryptType == 1)
|
||||||
|
{
|
||||||
|
$return = 'DES_DECRYPT('.$field.',\''.$cryptKey.'\')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Renvoie l'id de la connexion
|
\brief Renvoie l'id de la connexion
|
||||||
@@ -751,7 +801,7 @@ class DoliDb
|
|||||||
/**
|
/**
|
||||||
\brief Liste des tables dans une database.
|
\brief Liste des tables dans une database.
|
||||||
\param database Nom de la database
|
\param database Nom de la database
|
||||||
\param table Filtre sur tables <EFBFBD> rechercher
|
\param table Filtre sur tables a rechercher
|
||||||
\return array Tableau des tables de la base
|
\return array Tableau des tables de la base
|
||||||
*/
|
*/
|
||||||
function DDLListTables($database, $table='')
|
function DDLListTables($database, $table='')
|
||||||
@@ -771,19 +821,19 @@ class DoliDb
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Cr<EFBFBD>e une table
|
\brief Cree une table
|
||||||
\param table Nom de la table
|
\param table Nom de la table
|
||||||
\param fields Tableau associatif [nom champ][tableau des descriptions]
|
\param fields Tableau associatif [nom champ][tableau des descriptions]
|
||||||
\param primary_key Nom du champ qui sera la clef primaire
|
\param primary_key Nom du champ qui sera la clef primaire
|
||||||
\param unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur
|
\param unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur
|
||||||
\param fulltext Tableau des Nom de champs qui seront index<EFBFBD>s en fulltext
|
\param fulltext Tableau des Nom de champs qui seront indexes en fulltext
|
||||||
\param key Tableau des champs cl<EFBFBD>s noms => valeur
|
\param key Tableau des champs cles noms => valeur
|
||||||
\param type Type de la table
|
\param type Type de la table
|
||||||
\return int <0 si KO, >=0 si OK
|
\return int <0 si KO, >=0 si OK
|
||||||
*/
|
*/
|
||||||
function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
|
function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
|
||||||
{
|
{
|
||||||
// cl<EFBFBD>s recherch<EFBFBD>es dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
|
// cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
|
||||||
// ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
|
// ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
|
||||||
$sql = "create table ".$table."(";
|
$sql = "create table ".$table."(";
|
||||||
$i=0;
|
$i=0;
|
||||||
@@ -847,7 +897,7 @@ class DoliDb
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief d<EFBFBD>crit une table dans une database.
|
\brief decrit une table dans une database.
|
||||||
\param table Nom de la table
|
\param table Nom de la table
|
||||||
\param field Optionnel : Nom du champ si l'on veut la desc d'un champ
|
\param field Optionnel : Nom du champ si l'on veut la desc d'un champ
|
||||||
\return resource
|
\return resource
|
||||||
@@ -865,13 +915,13 @@ class DoliDb
|
|||||||
* \brief Insert a new field in table
|
* \brief Insert a new field in table
|
||||||
* \param table Nom de la table
|
* \param table Nom de la table
|
||||||
* \param field_name Nom du champ a inserer
|
* \param field_name Nom du champ a inserer
|
||||||
* \param field_desc Tableau associatif de description du champ a inserer[nom du parametre][valeur du param<EFBFBD>tre]
|
* \param field_desc Tableau associatif de description du champ a inserer[nom du parametre][valeur du parametre]
|
||||||
* \param field_position Optionnel ex.: "after champtruc"
|
* \param field_position Optionnel ex.: "after champtruc"
|
||||||
* \return int <0 si KO, >0 si OK
|
* \return int <0 si KO, >0 si OK
|
||||||
*/
|
*/
|
||||||
function DDLAddField($table,$field_name,$field_desc,$field_position="")
|
function DDLAddField($table,$field_name,$field_desc,$field_position="")
|
||||||
{
|
{
|
||||||
// cl<EFBFBD>s recherch<EFBFBD>es dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
|
// cles recherchees dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
|
||||||
// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
|
// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
|
||||||
$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
|
$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
|
||||||
$sql .= $field_desc['type'];
|
$sql .= $field_desc['type'];
|
||||||
@@ -919,8 +969,8 @@ class DoliDb
|
|||||||
/**
|
/**
|
||||||
\brief Create a user
|
\brief Create a user
|
||||||
\param dolibarr_main_db_host Ip serveur
|
\param dolibarr_main_db_host Ip serveur
|
||||||
\param dolibarr_main_db_user Nom user <EFBFBD> cr<EFBFBD>er
|
\param dolibarr_main_db_user Nom user a creer
|
||||||
\param dolibarr_main_db_pass Mot de passe user <EFBFBD> cr<EFBFBD>er
|
\param dolibarr_main_db_pass Mot de passe user a creer
|
||||||
\param dolibarr_main_db_name Database name where user must be granted
|
\param dolibarr_main_db_name Database name where user must be granted
|
||||||
\return int <0 si KO, >=0 si OK
|
\return int <0 si KO, >=0 si OK
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||||
* Copyright (C) 2005-2007 Regis Houssin <regis@dolibarr.fr>
|
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -465,7 +465,7 @@ class DoliDb
|
|||||||
{
|
{
|
||||||
// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
|
// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
|
||||||
if (! is_object($resultset)) { $resultset=$this->results; }
|
if (! is_object($resultset)) { $resultset=$this->results; }
|
||||||
// Si resultset en est un, on libere la m<EFBFBD>moire
|
// Si resultset en est un, on libere la memoire
|
||||||
if (is_object($resultset)) mysqli_free_result($resultset);
|
if (is_object($resultset)) mysqli_free_result($resultset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -743,6 +743,7 @@ class DoliDb
|
|||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Decrypt sensitive data in database
|
* \brief Decrypt sensitive data in database
|
||||||
* \param field Field name to decrypt
|
* \param field Field name to decrypt
|
||||||
@@ -750,7 +751,7 @@ class DoliDb
|
|||||||
* \param cryptKey Encryption key
|
* \param cryptKey Encryption key
|
||||||
* \return return Field to decrypt if used
|
* \return return Field to decrypt if used
|
||||||
*/
|
*/
|
||||||
function decrypt($field, $cryptType=2, $cryptKey='')
|
function decrypt($field, $cryptType=0, $cryptKey='')
|
||||||
{
|
{
|
||||||
$return = $field;
|
$return = $field;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user