| Обфускация структуры полей в базе данных |
[исправить] |
Хорошим примером защиты данных в разных базах является их шифрование. Для
хранения паролей используют лишь хеш. А хеш, как известно, необратим.
Нижепредложенный perl-скрипт хорош для огораживания структуры полей таблиц баз
данных под управлением MySQL 5.x. Обфускация полей базы вкупе с шифрованием
данных может минимизировать потери в случае эксплуатации sql-injection
уязвимостей и утечки данных.
В качестве аргументов передаётся файл с SQL-дампом структуры БД и "соль" к
хэшу. На выходе формируется файл с полями, заменёнными на нечитаемые наборы
символов, что затрудняет определение суть хранимых в полях данных (если данные
в БД хранятся в зашифрованном виде).
Код ниже:
use Digest::SHA qw(sha256_hex);
print "-------------------------------------\n";
print "db_obfuscator started\n";
if (($#ARGV + 1)<2)
{
print "run $0 db_name.sql pass\n";
print "-------------------------------------\n";
die;
}
my $db_filename = $ARGV[0];
my $db_filename_out = $ARGV[0];
$db_filename_out =~ /(\w+)\.(\w+)/;
$db_filename_out = $1 . "_out." . $2;
my $base_hash = sha256_hex($ARGV[1]);
my $hash_str = $base_hash . "test_str";
my $text;
$q = sha256_hex($hash_str);
#print "$hash_str = $q\n";
$filesize = -s $db_filename;
open DB,"<", $db_filename or die "could not open $db_filename\n";
my $filesize_test = read (DB, $text, $filesize);
print "read $filesize_test bytes from $db_filename\n";
close DB;
my @matches = ($text =~ /\`[a-z,_,0-9]+\`/g);
#print "found @matches.lenght() \n";
foreach $abc(@matches)
{
$q = sha256_hex($base_hash.$abc);
$text =~s/$abc/\`$q\`/g;
# print "$abc = $q\n";
}
open (outfile, ">", $db_filename_out);
printf outfile $text or die "could not write $db_filename_out\n";
close(outfile);
my $filesize_out = -s $db_filename_out;
print "wrote $filesize_out bytes into $db_filename_out\n"
|
| |
|
|
|
| Раздел: Корень / Безопасность / Шифрование, PGP |