Шредер — не удобочитаемый код 1с




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

18 Comments

  1. ZOMI

    Вот и выросло поколение одноэсников не знающих кто такая тетя Обфускация. http://infostart.ru/public/15907/

    А гадить преемнику — за такое из профессии гнать нужно…

    Reply
  2. AlexInqMetal

    изобрел велосипед, да еще и с одним колесом

    ПочтиНормальныйТекст = СтрЗаменить(СуперШифрованныйТекст,»;»,»;»+Символы.ПС);

    Alt+Shift+F

    на каждого хацкера найдется антихацкер

    Reply
  3. 3.14159

    вот качественнее «не удобочитаемый код 1с» получается с помощью http://infostart.ru/public/287653/ 🙂

    Reply
  4. YourHelper

    что-то мне подсказывает, что обычное форматирование его сделает читаемым))

    Reply
  5. Dmitri_1C

    Есть вопрос:

    Сколько времени автор потратил на создание этой обработки?

    Reply
  6. xten

    Коллега на работе и без этой обработки так код пишет, что хуже уже не сделать. Спрашиваю его, где хоть один комментарий, говорит » А зачем?»

    Reply
  7. AlexInqMetal

    (6) xten,

    хуже уже не сделать

    можно еще целиком на латинице писать) по себе знаю на латинице код в 1с прям расплывается с непривычки, несмотря на то что в свое время с Си и плюсами не по наслышке знаком, вроде б должен быть наметан глаз

    Reply
  8. DrAku1a

    (6) Дай ему кусок кода таког-же ламера разобрать — и пусть объяснит что там делается. Может тогда поймет зачем.

    Reply
  9. fomix

    Такую лажу было бы стыдно выкладывать. А тут на те вам — очередная перделкасвистелка, зато авторская!

    Reply
  10. Патриот

    (0) это самый жёсткий обфускатор, из тех что я видел))

    На ИС впору делать рейтинг публикаций которые лучше б и не вылезали на свет божий. Чтобы перед написанием статьи человек мог ознакомиться, как лучше делать не стоит.

    (7) AlexInqMetal,

    можно еще целиком на латинице писать)

    это еще фигня, я встречал когда через слово то англоязычный литерал, то русскоязычный =((

    Reply
  11. ZOMI

    (10) Патриот, ccылку кидал в основном к теоретической части)

    Reply
  12. G.P.

    Пожалуй, самый адекватный обфускатор.

    Нашёл в нем один баг.

    Если в ориганальном тексте запросов есть перенос строк (новая строка всегда начинается с симвова |)

    то при склеивании строк Шредером символы | добавляются в текст запросов, что вызывает ошибку выполнения запросов.

    Reply
  13. Svetlaya_

    Вы тут про адекватность обфускаторов пишете, а представьте себе, что программист, который продал зашифрованную обработку, на следующий день сдох, а клиенту через пару недель подправить что-то приперло. И что ему делать?? Деньги отдал и нифига … А если таких обработок в базе уже 10 и теперь за каждым гением бегать, когда ситуация изменилась??! Вы и так получаете свой гонорар, когда обработку продаете, но все, что попадает в базу ДОЛЖНО быть доступно для настройки потому, что становится частью этого организма. А вы господа шифровщики продаете импланты, которые через некоторое время отторгаются, что априори сволочизм!!! Сходите также к стоматологу с претензией, что вставленный зуб отвалился через два года и послушайте о том, что вы оказывается не доплатили бабла, чтобы он дольше стоял!!!

    Reply
  14. herfis

    (13) Можно подумать, вас заставляют с ножом у горла покупать зашифрованную обработку. Что значит «вы и так получаете свой гонорар»? Если автор продает обработку зашифрованной, значит он считает что исходники стоят еще дороже. Значительно дороже. Ваше мнение может отличаться, но навязывать его автору вы права не имеете. Даже морального.

    Это обычный рынок. Не нравится товар или цена — пожимаешь плечами и проходишь мимо. Можно попробовать связаться с автором и договориться. Истерить-то зачем?

    Я тоже не люблю шифрованные обработки и стараюсь их избегать. В 95% случаев это обычные скрипты понятной функциональности не абы каких трудозатрат и сложности, которые хотелось бы дорабатывать при необходимости самому. Но встречаются и целые сложные подсистемы, для которых желание автора воспрепятствовать их пиратскому распространению вполне понятно. Тут уже приходится делать выбор и оценивать все возможные риски с точки зрения совокупной стоимости владения. В том числе и вероятность того, что автор обработки сдохнет на следующий день.

    Reply
  15. Vovan1975

    (14) а Вы не задумывались, почему 1С не шифрует свои конфы?

    Reply
  16. Sapiens_bru

    (15) Это 1с то не шифрует? 1с продает конфу, которая запускается исключительно на 1с платформе и 99% кода типовой конфы завязаны на механизмы платформы, которая зашифрована полностью.

    Reply
  17. Cooler

    (15)

    почему 1С не шифрует свои конфы?

    Да уже практически шифрует — нагромождение кода, вызовов функций и процедур в последних редакциях заставляют вспомнить о стеганографии: вроде все на виду, а нужное хрен найдешь.

    Reply
  18. herfis

    (15) По ряду причин:

    1) увеличивается сопутствующий доход из других источников (продажа лицензий на платформу)

    2) та же бухия, к примеру, завязана на поддержку законодательства, что снижает стимул использовать ворованное решение. Проще платить и беспроблемно получать свежие обновления, которые жизненно необходимы. И то. Если бы 1С не проводила активную политику противодействия пиратству, картина была бы несколько другой. Но она может это себе позволить.

    А вот отраслевые конфигурации частенько так или иначе содержат шифрованные участки кода, потому что иначе дополнительное лицензирование можно строить только на честном слове.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *