Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP Defender, Оцените... 
:(
    Опции темы
BuShaRt
Дата 11.6.2007, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Сегодня наткнулся на интересное творение, так называемую PHP Defender. Суть программы в придане коду некоторой запутаности, а именно, как утверждают разработчики: 

Цитата

PHP Defender запутает Ваш PHP-код до неузнаваемости: 

  • Приведет все переменные, функции и классы к нечитаемому виду
  • Удалит все комментарии, лишние пробелы и переносы строк
  • Скрипты будут работать даже на тех хостингах, где не поддерживается или не установлен Zend Optimizer
  • Обрабатывает все дерево каталогов за один проход
  • Не требует никаких надстроек на сервере
  • Полный контроль над процессом



Хотелось бы выслушать ваше мнение, а стоит ли игра свеч, для чего приведу пример кода:

До:
Код

<?php
include_once 'all_connect.php';

if (empty($page)){  
    $page='new';
}

if (empty ($_POST['indexform'])) {
    GoIndex ($_GET['page']);    
}
    
$filter_obj->field_validator('Логин', $_POST['login'], 'alphanumeric', 4, 15);     
$filter_obj->field_validator('Пароль', $_POST['password'], 'string', 4, 15);
    
if (!($row = $mysql_obj->CheckPass ($_POST['login'], $_POST['password']))) {
    $filter_obj->messages[] = 'Логин - пароль не совпадают.';    
}     

if ($filter_obj->messages) {    
    GoIndex ($page);         
}

GreatMemberSession($row['login'], $row['password'], $row['lvl']);    
header('Location: index.php?'.session_name().'='.session_id().'&page=rule');     
    
?>


После:
Код

<?php // Protected by PHPDefender.com ?>
<?php include_once 'all_connect.php'; if (empty($IIIIIIIIIIII)){ $IIIIIIIIIIII='new'; } if (empty ($_POST['indexform'])) { GoIndex ($_GET['IIIIIIIIIIII']); } $IIIIIIIIIIlI->field_validator('Логин', $_POST['login'], 'alphanumeric', 4, 15); $IIIIIIIIIIlI->field_validator('Пароль', $_POST['password'], 'string', 4, 15); if (!($IIIIIIIIIIll = $IIIIIIIIIIl1->CheckPass ($_POST['login'], $_POST['password']))) { $IIIIIIIIIIlI->messages[] = 'Логин - пароль не совпадают.'; } if ($IIIIIIIIIIlI->messages) { GoIndex ($IIIIIIIIIIII); } GreatMemberSession($IIIIIIIIIIll['login'], $IIIIIIIIIIll['password'], $IIIIIIIIIIll['lvl']); header('Location: index.php?'.session_name().'='.session_id().'&IIIIIIIIIIII=rule'); ?>

PM MAIL   Вверх
Хрипа
Дата 11.6.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



BuShaRt
Ну и для чего это надо ?
Ах да я догадался утилита для ламеров которые сами не в состоянии написать безопастный код smile))
Смысла в этой утилите нет так как Нечитабельный код оценивается в 0 каким бы он полезным небыл!

--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
BuShaRt
Дата 11.6.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Хрипа
Хм, а ты можешь написать код защищенный от модификации третьими лицами?
И любой код, защищенный от модификации нечитабелен smile
PM MAIL   Вверх
Serkys
Дата 11.6.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 4
Всего: 22



Надо попробовать.
Перед выкладкой заказчику на хостинг можно хотя бы так затруднить работу, если он меня кинет.
Не кинет - нормальный код отдавать.

Добавлено через 4 минуты и 5 секунд
Цитата(Хрипа @  11.6.2007,  10:15 Найти цитируемый пост)
Ах да я догадался утилита для ламеров которые сами не в состоянии написать безопастный код

Код она безопасным не делает, только предельно затрудняет его чтение и модификацию.
PM MAIL   Вверх
Opik
Дата 11.6.2007, 14:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Абсолюбтно в этом не вижу смысла, т.к этот код при желании вполне можно разобрать, никакой смысловой нагрузки.
PM MAIL Skype   Вверх
sTa1kEr
Дата 11.6.2007, 14:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Это называется Обфускация. А подобные программы соответственно обфускаторами (для PHP их в интернете полно). 

На самом деле, имхо, на данный лучшая защита кода PHP - это именно обфускация. Лучше, чем Zend Encoder и IonCube, т.к. после них код возможно восстановить (хотя бы даже в теории, хотя на практике это тоже возможно) полностью включая имена переменных итп, после обфускатора, код автоматически привести в исходное состояние невозможно в принципе, а восстановление кода вручную потребует чрезмерно много усилий. 

Но тут есть и подводные камни, к примеру если используются магические методы типа __get(), изменяемые имена переменных $$var, функций $func() итп, то после обфускатора код может стать не рабочим, либо обфускатор не принесет сколько-нибудь полезного эффекта.

Добавлено через 2 минуты и 31 секунду
Цитата(Opik @  11.6.2007,  14:21 Найти цитируемый пост)
Абсолюбтно в этом не вижу смысла, т.к этот код при желании вполне можно разобрать, никакой смысловой нагрузки. 

В данном, простейшем примере - да. К тому же в этом примере не были заменены имена методов (вероятно потому-что они public). Но попробуйте разобрать сколько-нибудь большой проект. Услий на это уйдет в разы больше чем написать все с нуля.
PM MAIL   Вверх
mikla
Дата 11.6.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



Хорошая штука) лабы преподам сдавать )
--------------------
PM MAIL ICQ Skype   Вверх
BuShaRt
Дата 11.6.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Цитата(sTa1kEr @  11.6.2007,  14:28 Найти цитируемый пост)
Цитата(Opik @  11.6.2007,  14:21 )Абсолюбтно в этом не вижу смысла, т.к этот код при желании вполне можно разобрать, никакой смысловой нагрузки. В данном, простейшем примере - да. К тому же в этом примере не были заменены имена методов (вероятно потому-что они public). Но попробуйте разобрать сколько-нибудь большой проект. Услий на это уйдет в разы больше чем написать все с нуля.


именно... код на килобайт 100 можно пол дня только разбивать на строки и проблемы проставлять... а переменные искать, так еще дольше... (даже если юзать Find&Replace)...

Если уж говорить о безопастности, то в данном коде для пущий безопастности (в плане кидалова), можно добавить функцию замоудаления, вызываемую по определенному POST запросу.... я сомневаюсь, что эту функцию можно найти в таком коде...
PM MAIL   Вверх
WolfON
Дата 11.6.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 6
Всего: 8



Ничего запутанного в том коде не увидел.
Ну убрал переносы, ну изменил название переменной - код все-равно читабелен.
PM MAIL ICQ   Вверх
BuShaRt
Дата 11.6.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Причем способ не плох в плане борьбы с конкурентами... Я бы заказчику помохал ручкой, если бы мне он такой код на доработку дал smile))
ну или за дешифрацию, взял бы больш, чем за доработку...

Добавлено через 1 минуту и 15 секунд
WolfON
в данном случае код всего несколько байтовый, а если больше? там уже за переменными не уследишь... 
PM MAIL   Вверх
sTa1kEr
Дата 11.6.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(WolfON @  11.6.2007,  15:08 Найти цитируемый пост)
Ничего запутанного в том коде не увидел.
Ну убрал переносы, ну изменил название переменной - код все-равно читабелен. 

Так же в идеале изменение имен пользовательских классов, методов, функций, замена числовых констант на числа (да много чего еще можно перечислить).  Еще в данном примере вы сначала прочитали исходный код и только затем код после обфускатора, согласитесь, это имеет очень большое значение. Легко разгадывать кроссворды заранее зная все ответы.

Вы просто возьмите любой не знакомый вам проект, проведите его через обфускатор и только потом попробуйте разобраться в нем.

PM MAIL   Вверх
WolfON
Дата 11.6.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 6
Всего: 8



sTa1kEr, я не читал оригинальный код smile
в теме про то, как кодить не надо были примеры и позапутанней без всякого обфускатора )
PM MAIL ICQ   Вверх
BuShaRt
Дата 11.6.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Цитата(WolfON @  11.6.2007,  16:08 Найти цитируемый пост)
в теме про то, как кодить не надо были примеры и позапутанней без всякого обфускатора )

это точно...
PM MAIL   Вверх
sTa1kEr
Дата 11.6.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(WolfON @  11.6.2007,  16:08 Найти цитируемый пост)
в теме про то, как кодить не надо были примеры и позапутанней без всякого обфускатора ) 

Т.е. вы предлагаете сразу писать так, что бы никто не понял? Тоже вариант smile
Для наглядности, скрипт простейший из FCKEditor-а, но немножко посложнее (120 строк). Использовал простенький бесплатный обфускатор PHP Obfuscator.
Код

<?php       require('config.php') ;  require('util.php') ;     function R160B6F6AB8B123CE49124372CDE87FBF( $R160B6F6BB8B965CE49124372CDE87FBF, $R9F74F54ADCF8A58328B7A52193984A15 = '', $R1FCB858E12F43C96B8466B76542888EA = '', $R78165B45A2CB66AE0C95F4B3E58DE8B6 = '' )  {   echo '<script type="text/javascript">' ;   echo 'window.parent.OnUploadCompleted(' . $R160B6F6BB8B965CE49124372CDE87FBF . ',"' . str_replace( '"', '\\"', $R9F74F54ADCF8A58328B7A52193984A15 ) . '","' . str_replace( '"', '\\"', $R1FCB858E12F43C96B8466B76542888EA ) . '", "' . str_replace( '"', '\\"', $R78165B45A2CB66AE0C95F4B3E58DE8B6 ) . '") ;' ;   echo '</script>' ;   exit ;  }     if ( !$RF29199C6C5DC97F47564201E7F579BC5['Enabled'] )   R160B6F6AB8B123CE49124372CDE87FBF( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/upload/php/config.php" file' ) ;     if ( !isset( $_FILES['NewFile'] ) || is_null( $_FILES['NewFile']['tmp_name'] ) || $_FILES['NewFile']['name'] == '' )   R160B6F6AB8B123CE49124372CDE87FBF( '202' ) ;     $RDE1F7C1965E6876162F452A003BC5022 = $_FILES['NewFile'] ;     $R9B035C0C2CD4419F00AEC294C6412607 = $RDE1F7C1965E6876162F452A003BC5022['name'] ;     if ( $RF29199C6C5DC97F47564201E7F579BC5['ForceSingleExtension'] )   $R9B035C0C2CD4419F00AEC294C6412607 = preg_replace( '/\\.(?![^.]*$)/', '_', $R9B035C0C2CD4419F00AEC294C6412607 ) ;    $R2C7C70346D7697E2CD813AAF4DBE7476 = $R9B035C0C2CD4419F00AEC294C6412607 ;     $RC899AB8B9C9BCB7E599F49D8B6AF43EE = substr( $R9B035C0C2CD4419F00AEC294C6412607, ( strrpos($R9B035C0C2CD4419F00AEC294C6412607, '.') + 1 ) ) ;  $RC899AB8B9C9BCB7E599F49D8B6AF43EE = strtolower( $RC899AB8B9C9BCB7E599F49D8B6AF43EE ) ;     $R09440A3CA3835D43618D631497F1FC4C = isset( $_GET['Type'] ) ? $_GET['Type'] : 'File' ;     if ( !in_array( $R09440A3CA3835D43618D631497F1FC4C, array('File','Image','Flash','Media') ) )      R160B6F6AB8B123CE49124372CDE87FBF( 1, '', '', 'Invalid type specified' ) ;     $R0FD6040BC2389043D7DF33DC288A136E = $RF29199C6C5DC97F47564201E7F579BC5['AllowedExtensions'][$R09440A3CA3835D43618D631497F1FC4C] ;  $R8921101612376865B7055EB62CDBAFFA = $RF29199C6C5DC97F47564201E7F579BC5['DeniedExtensions'][$R09440A3CA3835D43618D631497F1FC4C] ;     if ( ( count($R0FD6040BC2389043D7DF33DC288A136E) > 0 && !in_array( $RC899AB8B9C9BCB7E599F49D8B6AF43EE, $R0FD6040BC2389043D7DF33DC288A136E ) ) || ( count($R8921101612376865B7055EB62CDBAFFA) > 0 && in_array( $RC899AB8B9C9BCB7E599F49D8B6AF43EE, $R8921101612376865B7055EB62CDBAFFA ) ) )   R160B6F6AB8B123CE49124372CDE87FBF( '202' ) ;    $R797BFCF1140B70857CFEA95A6E20C7F7 = '0' ;  $RBE8758BD26B4BC41D963F311D3949ADB  = '' ;     $RFE872B8B9666AC541A60A136195EC79C = 0 ;     if ( isset( $RF29199C6C5DC97F47564201E7F579BC5['UserFilesAbsolutePath'] ) && strlen( $RF29199C6C5DC97F47564201E7F579BC5['UserFilesAbsolutePath'] ) > 0 )   $R1A2300728C23076C0271587CC6D3B6A0 = $RF29199C6C5DC97F47564201E7F579BC5['UserFilesAbsolutePath'] ;  else    $R1A2300728C23076C0271587CC6D3B6A0 = GetRootPath() . $RF29199C6C5DC97F47564201E7F579BC5["UserFilesPath"] ;    if ( $RF29199C6C5DC97F47564201E7F579BC5['UseFileType'] )   $R1A2300728C23076C0271587CC6D3B6A0 .= $R09440A3CA3835D43618D631497F1FC4C . '/' ;    while ( true )  {     $RD272D57B3C3DDE20773A61EFB42C2BDF = $R1A2300728C23076C0271587CC6D3B6A0 . $R9B035C0C2CD4419F00AEC294C6412607 ;       if ( is_file( $RD272D57B3C3DDE20773A61EFB42C2BDF ) )   {    $RFE872B8B9666AC541A60A136195EC79C++ ;    $R9B035C0C2CD4419F00AEC294C6412607 = RemoveExtension( $R2C7C70346D7697E2CD813AAF4DBE7476 ) . '(' . $RFE872B8B9666AC541A60A136195EC79C . ').' . $RC899AB8B9C9BCB7E599F49D8B6AF43EE ;    $R797BFCF1140B70857CFEA95A6E20C7F7 = '201' ;   }   else   {    move_uploaded_file( $RDE1F7C1965E6876162F452A003BC5022['tmp_name'], $RD272D57B3C3DDE20773A61EFB42C2BDF ) ;      if ( is_file( $RD272D57B3C3DDE20773A61EFB42C2BDF ) )    {     $R7DF43AFDE393D029B781DEF7D6A49D3B = umask(0) ;     chmod( $RD272D57B3C3DDE20773A61EFB42C2BDF, 0777 ) ;     umask( $R7DF43AFDE393D029B781DEF7D6A49D3B ) ;    }        if ( $RF29199C6C5DC97F47564201E7F579BC5['UseFileType'] )     $RBE8758BD26B4BC41D963F311D3949ADB = $RF29199C6C5DC97F47564201E7F579BC5["UserFilesPath"] . $R09440A3CA3835D43618D631497F1FC4C . '/' . $R9B035C0C2CD4419F00AEC294C6412607 ;    else     $RBE8758BD26B4BC41D963F311D3949ADB = $RF29199C6C5DC97F47564201E7F579BC5["UserFilesPath"] . $R9B035C0C2CD4419F00AEC294C6412607 ;      break ;   }  }    R160B6F6AB8B123CE49124372CDE87FBF( $R797BFCF1140B70857CFEA95A6E20C7F7, $RBE8758BD26B4BC41D963F311D3949ADB, $R9B035C0C2CD4419F00AEC294C6412607 ) ;  ?>


PM MAIL   Вверх
BuShaRt
Дата 11.6.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Я думаю, как нечто для постоянной защиты не пройдет т.к. Replace быстро все поставит на свои месте...

Но вот,
Цитата(Serkys @  11.6.2007,  11:47 Найти цитируемый пост)
Перед выкладкой заказчику на хостинг можно хотя бы так затруднить работу, если он меня кинет.Не кинет - нормальный код отдавать.

+
Цитата(BuShaRt @  11.6.2007,  15:08 Найти цитируемый пост)
Если уж говорить о безопастности, то в данном коде для пущий безопастности (в плане кидалова), можно добавить функцию замоудаления, вызываемую по определенному POST запросу.... я сомневаюсь, что эту функцию можно найти в таком коде...

По моему действенно, хотя не пробывал... ваше мнение?

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0981 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.