URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 106363
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Обфускация структуры полей в базе д..."

Отправлено auto_tips , 19-Янв-16 08:23 
Хорошим примером защиты данных в разных базах является их шифрование. Для хранения паролей используют лишь хеш. А хеш, как известно, необратим. Нижепредложенный 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"


URL:
Обсуждается: http://www.opennet.ru/tips/info/2935.shtml


Содержание

Сообщения в этом обсуждении
"Обфускация структуры полей в базе данных"
Отправлено cmp , 19-Янв-16 08:23 
Отличный пример говнокода, уважаемый, если уж постите что-то, то хоть хелпу вбейте в код, иначе проще самостоятельно написать.

"Обфускация структуры полей в базе данных"
Отправлено Аноним , 19-Янв-16 11:17 
Вы не поняли, это видимо юмор такой, типа "обфускация кода для обфускации". Старая школа, респект за ($#ARGV + 1)<2 и @matches  = ($text =~ /\`[a-z,_,0-9]+\`/g).



"Обфускация структуры полей в базе данных"
Отправлено Crazy Alex , 20-Янв-16 04:43 
И что здесь неясного?

"Обфускация структуры полей в базе данных"
Отправлено Аноним , 19-Янв-16 09:12 
if (($#ARGV + 1)<2)

гениально


"Обфускация структуры полей в базе данных"
Отправлено _KUL , 19-Янв-16 10:21 
Да и say уже пора использовать, не зря же за разрабы беспокоятся, кол-во символах в популярных командах уменьшают :)
perl -e "use v5.10; if (scalar @ARGV < 2) {say \"Is bad\";};"

"Обфускация структуры полей в базе данных"
Отправлено Andrey Mitrofanov , 19-Янв-16 11:42 
> кол-во символах в
> уменьшают :)
> perl -e "use v5.10; if (scalar @ARGV < 2) {say \"Is bad\";};"

"...\"...\"..."  =>  '..."..."...'  //Что ты сделал в свои годы для ш-ш-перла?


"Обфускация структуры полей в базе данных"
Отправлено _KUL , 19-Янв-16 15:41 
Вы уверены, что я не из самодельного интерпретатора передаю строку с коммандами, который не понимает обработку одинарных кавычек?
В файле программы слешей не было бы.

"Обфускация структуры полей в базе данных"
Отправлено Crazy Alex , 20-Янв-16 04:48 
(@ARGV < 2) было бы чуть короче, но по-моему не принципиально.

"Обфускация структуры полей в базе данных"
Отправлено hyphop , 22-Янв-16 22:13 
Мне тоже понравилась эта строча ))) Так за то и любим перл - что можешь писать как захочется )))

"Обфускация структуры полей в базе данных"
Отправлено Approximator , 19-Янв-16 09:47 
Коллеги, не пинайте студента. Сейчас руки отобьёте, озлобится и пойдёт семки грызть по подъездам с охотой крепкой.
Человек решил для себя конкретную задачу. Молодец.

Но автору: однако, комментировать код полезно не только лишь для тех, кто не смотрит в завтрашний день ...

:-)


"Обфускация структуры полей в базе данных"
Отправлено _KUL , 19-Янв-16 10:25 
> Коллеги, не пинайте студента. Сейчас руки отобьёте, озлобится и пойдёт семки грызть
> по подъездам с охотой крепкой.
> Человек решил для себя конкретную задачу. Молодец.
> Но автору: однако, комментировать код полезно не только лишь для тех, кто
> не смотрит в завтрашний день ...
> :-)

Наоборот, пристыдят и он на зло всем хихикающим, пойдёт и плюсы по Страуструпу выучит!
p.s. хорошая книжка http://www.ozon.ru/context/detail/id/25227935/ а потом вот эту интересно читать http://www.ozon.ru/context/detail/id/4289407/


"Обфускация структуры полей в базе данных"
Отправлено qqq , 19-Янв-16 13:30 
Мало перереименовать поля в дампе БД, нужно ведь и клиентский код исправить, чтобы там использовались новые имена полей. Не будешь же везде писать
$sql = "SELECT " . sha256_hex($base_hash."name") . ", " . sha256_hex($base_hash."bdate") . " FROM user";
вместо
$sql = "SELECT name,bdate FROM user";


"Обфускация структуры полей в базе данных"
Отправлено 3619629066 , 19-Янв-16 16:07 
В том то весь и замут. В клиенском коде пиши имена в кавычках
char *sql_str= "select `name` from `users`;";
И парсер так-же всё обработает.

"Обфускация структуры полей в базе данных"
Отправлено Аноним , 20-Янв-16 21:04 
> В том то весь и замут. В клиенском коде пиши имена в
> кавычках
> char *sql_str= "select `name` from `users`;";
> И парсер так-же всё обработает.

Я одного не пойму. А что, просто взять Green SQL и адекватно его настроить - или просто проверять передаваемые в предикат поля на предмет наличия там UNION - это не комильфо? Обязательно надо вот так, автогеном, через ж.пу, без наркоза - и при этом надеяться, что  _вот это вот_ поможет?


"Обфускация структуры полей в базе данных"
Отправлено Аноним , 21-Янв-16 15:10 
> В том то весь и замут. В клиенском коде пиши имена в
> кавычках
> char *sql_str= "select `name` from `users`;";
> И парсер так-же всё обработает.

Тогда где здесь защита от sql-injections?


"Обфускация структуры полей в базе данных"
Отправлено 3619629066 , 21-Янв-16 17:38 
>Тогда где здесь защита от sql-injections?

Слонопок? Защита от защиты же.
Базу тырят и вместо структуры видят антиструктуру. База коллапсирует, все коллапсируют.


"Обфускация структуры полей в базе данных"
Отправлено Аноним , 05-Фев-16 08:36 
Конечно, хакеры взломавшие сервер настолько глупые что совсем не поймут что это у них тут в базе. А зачем они вообще сервер ломали?