Защита конфигурации




Принцип обмена данными из 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='\

50 Comments

  1. АЛьФ

    Автор: DeFor aka Федор (fjedor###airserver.kz)

    Reply
  2. andrewalexk

    🙂

    хехе

    конкурент Альфу и его КЗК-2?!

    Reply
  3. CheBurator

    А поясните, плиз

    · Редактировать можно модули не превышающие по размеру 64 кб.

    — 64 кб чистого текста?



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

    — с флешки как, работать будет?

    каковы перспективы вскрытия закриптованного модуля?

    Reply
  4. SumMrak

    думаю вполне подойдет для демоверсий

    Reply
  5. avhrst

    Отвечаю на вопросы:

    1. Стабильно работает на больших MD (мной постоянно криптовалась моя конфигурациия md — 12Mb)

    2. За все время работы (более 2-х лет) небыло проблем с расшифровкой.

    3. Я думаю работать будет с любого носителя , которому можно выставить имя А: и задать метку тома. Впрочем я всегда пользовался дискетой (в данном случае это удобней чем флешка 🙂 )

    Reply
  6. avhrst

    Персонально для Альфа хочу подчеркнуть:

    Я никоим образом не претендую на авторство, но так как изначально программа бесплатная и не комерческая, думаю у меня есть все основания разместить ее от себя (учитывая проведенное мною тестирование в теч. 2-х лет) пускай люди пользуються, ведь сейчас в защите конфигурации есть очень острая необходимость.

    Reply
  7. avhrst

    Немного о способе шифрования:

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

    После шифрования весь текст глобального модуля в зашифрованом веде переноситься в общие таблицы, поэтому для работы программы необходимо иметь хотябы одну общую таблицу.

    Обращение к зашифрованому тексту модуля происходит через dll. Тоесть если ктото откроет глобальный модуль, то ничего конкретного там не найдет и не изменит. Методика работы программы чемто напоминает компилирование во «взрослых» языках.

    Reply
  8. brr

    Сколько стоит недемо?

    Reply
  9. avhrst

    «Не демо» -такой версии нет — программа полностью функциональна и полностью бесплатная.

    Reply
  10. CheBurator

    Да?

    а в описалове сказано что макс. для 2-х юзеров, и лицензию продлять можно только на месяц…

    ???

    Reply
  11. avhrst

    Зашифрованная таким способом конфигурация НОРМАЛЬНО работает и количество пользователей не важно. А если необходимо для демки выставить срок использования — то я пользуюсь средствами 1С — в глобальном модуле все прописываю (количество пользователей, на какой период работает) а потом шифрую

    Reply
  12. O-Planet

    + 1 чисто за поднятую тему. А когда еще и посмотрю, то и +10 рад буду поставить, если оно того стоит!

    Reply
  13. неадекват

    «…Шифруеться глобальный модуль, что при правильном использовании вполне достаточно.» Простите — Что значит при «правильном»? Очень актуально шифровать нароботки рассположенные в обработке (отчете). Шифровать глобальник можно в случае если сам же являешься разработчиком конфигурации — а это на много реже, чем адаптация существующей конфигурации, либо разработка на базе типовой. Таким образом исползование сужается до уровня подготовки демо-версий. Возможно есть вариант с шифрованием обработок?

    Reply
  14. Снусмумрик

    согласен с Эффектором ! Нужно шифрование внешних обработок !

    Reply
  15. АЛьФ

    Шифрование ныне не в моде, коллеги 🙂

    http://www.dorex.ru/?projects&kzk2

    Reply
  16. Sheyko

    Вбил бы за дискету, где я ее найду?

    Работает на любом диске с именем A: или B:, делал через SUBST

    Вскрывается методами аналогичными методам вскрытия КЗК1

    Reply
  17. Дмиитрий

    а на восьмёру тоже подойдёт?

    Reply
  18. anagkh

    огромное спасибо

    Reply
  19. wer_alex

    Благодарю разаработчика и пока начал пользоваться

    Reply
  20. Уфимская

    пока тока скачала, но верю, что работает, а посему +1

    Reply
  21. dad_dy

    не понял посчет пароля (своего), где его ввести? открыл через susbst и оно потребовало пароль.

    Reply
  22. O-Planet

    Аналогично! Что делать с паролем?

    Reply
  23. O-Planet

    У меня b: метка work. Ввожу этот work — и оно не пашет

    Reply
  24. ddk

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

    Reply
  25. skunk

    что-то она под 2003 сервером не айда… валиться

    Reply
  26. and_lk

    Попробовал, достаточно для поставки конфигураций заказчику без умных программистов рядом. Глобальник — это конечно здорово, но … Все-таки как насчет шифрования остальных модулей: справочников, документов, обработок, отчетов. И как получить не «This is copy demonstration !» А то сколько разработок по защите конфигурации не смотрел, такое впечатление что все программисты намеренно толкают в объятия АЛьФа с его КЗК-2! Эта шифрует только глобальник с 2 пользователями (у меня загрузилось 3, на третьем сообщила «You excess counting register users!» но продолжала работать), Golden Key O-Planet’а не хочет работать с FormEx и таблица значений заполняется медленно и т.д. А защищаться-то надо! Русский человек любит халяву и не хочет платить, а хочет копировать. Так что видимо прийдется покупать КЗК. Жалко, не нужна такая крутая защита, за столько денежек…

    Reply
  27. АЛьФ

    2(26) Если не нужна современная надежная защита, то можно купить защиту попроще:

    http://www.dorex.ru/?projects&cpc

    Работает со всеми модулями конфигурации, с внешними отчетами. И стоит копейки.

    Хотя, с системой кредита и КЗК-2 вполне доступна по деньгим любому серьезному разработчику. ИМХО, конечно.

    Reply
  28. O-Planet

    Ничего не покупаем. Смотрим направо вверх этой странички. Там написано: Golden Key… Для надежной защиты нужна версия, начиная от 1.105 😉

    Reply
  29. and_lk

    Прошу прощения у it.net’а за обсуждение не его приложения, но хочется ответить двум борцам за чистоту рядов програмных кодов 1С — O-Planet’у и АЛьФ’у. Ребята, куда не сунься, везде вы обсуждаете свои разработки, перечисляете все плюсы и минусы, занимаетесь саморекламой — даже здесь.

    O-Planet’у: «Для надежной защиты нужна версия, начиная от 1.105» — да ты сначала ее выложи (на сайте Golden Key V1.104 lite), дай попробовать, а потом рекламируй. Говорю же в 104 версии: медленно заполняется таблица значений, определение — Процедура ХХХ() Далее — шифровальщик разбивает на две строки и вылазят синтаксические ошибки, нет ограничения по сроку работы, непонятно зачем указывать число запусков и количество документов — по барабану 1С это, запускает и запускает, открывает и открывает … вообщем абсолютно сырой продукт. «»Ничего не покупаем. Смотрим направо вверх этой странички» — поставь клиенту такую демку — он и спасибо тебе скажет и еще даст 4$ на такси.

    АЛьФ’у: «Работает со всеми модулями конфигурации, с внешними отчетами. И стоит копейки». Во первых нельзя посмотреть -«Ограничения демонстрационной версии: лицензия формируется только на один день; документация ограничена файлом ReadMe.txt; компонента decoder.dll работоспособна только до 01.07.2007» — попробовал пишет «Истек срок лицензии». Во вторых, если речь идет о Lite — 50 «копеек» при функциональности «Lite — предназначена для создания демонстрационных версий и работы с конфигурациями, не требующими дальнейшего обновления или доработки» достаточно дорого, а Prof при 100 «копейках» — ну тогда уж лучше КЗК 2.0 Стандарт, все-таки не шифрование. «Хотя, с системой кредита и КЗК-2 вполне доступна по деньгим любому серьезному разработчику. ИМХО, конечно». Да не серьезные мы — так, погулять вышли! Серьезные сами себе защиту пишут. И «копейки» в размере 60-100 платим долго подумав, впрочим как и большинство Вас центровых. Насчет кредита, да из Белоруссии мы темные, как же Вам денежку то пересылать-то? После жарких баталий http://www.infostart.ru/projects/1337/ хотелось бы иметь что-то и недорогое и рабочее.

    Еще раз прошу прощения у it.net’а за лирическое отступление не по теме.

    Reply
  30. Снусмумрик

    Афтар-то, как ни прискорбно, прав. Дорого КЗК-2 для мелкого разработчика. С другой стороны — если снизит Альф цену, то напокупает у него каждый второй — и абмец, найдется добрая душа и сломает. А ломаный он и даром не надо

    Reply
  31. АЛьФ

    2(30) Я тебе со всей ответственностью заявляю, что цена ни как не влияет на объем продаж. Для тех, кому 3750 — дорого, будет дорого и 50 рублей.

    Для мелких же разработчиков специально придумали систему рассрочки.

    А по поводу «сломает»… Не так-то это просто, как некоторым кажется. Что в очередной раз подтвердила недавняя публичная проверка стойкости КЗК-2 на Мисте.

    2(29) Знаешь, у меня достаточно много клиентов из Белоруссии. Как-то они нашли пути для оплаты при желании.

    Заходишь на сайт КЗК-2, открываешь страницу «Купить» и видишь кучу способов оплаты. Как для фирм, так и для физических лиц.

    Так что извини, но все эти «дорого», «не знаю как оплатить» — это просто от того, что тебе на самом деле подобный инструмент не нужен.

    Reply
  32. Abadonna

    (30)>Дорого КЗК-2 для мелкого разработчика

    А зачем мелкому разработчику вообще что-то закрывать? Новый столбец в Счет-фактуре?

    Или обработку переброски со счета на счет?

    Reply
  33. O-Planet

    [29] За то нас и любят, что мы тут многих развлекаем 🙂 А по поводу ограничения — у меня все работает. Не знаю, о чем ты пишешь. Ну а с другой стороны, если у КЗК2 глюки начались, то мааааленькому «золотому ключику» оно должно быть простительно…

    Reply
  34. O-Planet

    … а вообще, я, наверное, вымирающий вид, потому что горжусь тем (и это — правда), что за всю свою 1С-практику ни разу не имел счастья поставить лицензионную 1С кому-либо. Я, если честно, даже не умею этого…

    Reply
  35. Снусмумрик

    2(31) «Для тех, кому 3750 — дорого, будет дорого и 50 рублей.»

    Не скажи. Разница огромная.

    Если мне нужно защитить продукт с которого я имею тыщу в месяц, то ради этого покупать КЗК за 3750 ?

    Стоит ли возни ?

    Если цена не влияет на объем продаж — дак поставь 100 000 :-))) Кому надо — купят 🙂

    Reply
  36. Снусмумрик

    2(32) Ну не скажи, Аркадий ! Давай абстрактно:

    Вот есть к примеру у кого-нить какой-нить отчет или обработка к типовой конфе, например.

    Потрудился он над ним часов так несколько, немного, может 2, а может 5.

    И считает что отчет этот полезен для общества. И чтоб другие не долбились те самые 2, а то и 5 часов — выложит он отчетик и назначить за него цену. Небольшую. Рублей пусть там 200 или 300. Чисто по справедливости.

    Дак вот если этот отчет ни как не защитить — то афтор с него получит шиш. Ибо хочется всем ХАЛЯВЫ. А так скачает человек отчетик, поюзает, а отчетик скажет ему через неделю: извини, мил человек, амбец — нужен я тебе, плати автору. И если нужен, то заплатит. И будет капать разработчику копеечка. Ты вот, Аркадий, откажешься, если будет капать тебе копеечка ? Вряд ли. И скажу больше: это есть нормальная практика для разработчиков и называетеся шареварные продукты. К которым мы все бежим искать ключик. А вот если нет его — то либо забиваем, либо платим, если шибко надо. И чем распространенее шареварная вещь, тем больше найдется любителей её поломать.

    А тут получается подумает автор, подумает: надо пойти значала ключик купить за 5000 руб, а потом когдааааа еще ентот ключик окупится. И болт. Не выложит ничего. Потому как не все у нас Опланеты и в востроге когда их трудом пользуются на халяву, за мифический рейтинг. Ему может и в кайф с Чебуратором рейтингами померится, а мне вот, например, в кайф когда бабосы на кармане есть.

    С другой стороны хорошо что есть Опланет и ему подобные. Доведет от свой голден кей до кондиции. Халявным может и не сделает, но и пятерку не поставит. Да и автор этой вот разработки может подтянет её на уровень. Тогда глядишь ценничек-то и спадет. Конкуренция, однако. И так со всеми ведь разработками, в том числе и с отчетом, который я выше описал. Найдется альтруист — выложит на шару и поток копеечный иссякнет в карман автору, только вот деньга-то за ключик уже заплачена.

    Reply
  37. Снусмумрик

    Вообще обсуждение на эту тему нужно выносить в отдельную ветвь на форум.

    Тема намного шире чем просто защита и цены на неё.

    Тема и о том как уберечся от альтруистов и желающих на шару поработать. Да и о многом другом

    Reply
  38. Abadonna

    >откажешься, если будет капать тебе копеечка ?

    По самым скромным подсчетам (с учетом проклаба) мой плагин к Тоталу юзает около 20 тыс. человек (минимум)

    Уж его-то я мог защитить! Однако…

    Reply
  39. Снусмумрик

    2(38

    скачало — не значит юзает

    а что ж не защитил-то ?

    Reply
  40. Abadonna

    >а что ж не защитил-то ?

    Да потому что фиг кто заплатит! Это я не знаю.

    Мне вот шибко интересно КТО Кристиану Гислеру за Тотал заплатил?

    Reply
  41. JohnyDeath

    (40) я вот понимаю, что Тотал — это ВЕЩЬ! Также я понимаю, что заплатить за не го я не могу (не хочу?). НО: я его не ломал, не патчил и т.д. — он прекрасно работает и так, единственное ограничение — при запуске надо нажать одну кнопку! А запускаю я его одни раз в день — ПриНачалеРабочегоДня() 😉

    Reply
  42. Abadonna

    (41) Где-то у меня лежит прога мною писанная, которая сама нужную кнопочку нажимает. На этой почве мы с Кристианом даже переписываться иногда начали :)))))

    Reply
  43. Снусмумрик

    Если бы тотал вырубался после 10 дней использования и НЕ БЫЛО БЫ ломалок — я бы заплатил 500 рублей. Потому что ВЕЩЬ

    Reply
  44. skunk

    (34)я тоже не имел счастья ставить кому-либо ломанную 1С… ибо если нету денех на продукт, то о какой оплате работы техничек могет быть речь… правда вот незнаю, к какому виду себя отнести вымирающими или как

    (38)количество кача никак не показывает количество использования… во первых кто-то скачал несколько раз… во вторых кто-то скачал абы посмотреть… в третьих кто-то скачал, абы просто было… а то если так считать, то мою статью отсюда http://club.shelek.ru/view.php?id=10 и только там глянули более 12000 раз… а ведь она на многих сайтах по 1С валялась

    Reply
  45. O-Planet

    Ньдя… А я не имел счастья лицензионную 1С ставить 0_о

    Reply
  46. O-Planet

    О!!! Так это ж я и писал 🙂

    Reply
  47. user72

    Слышал, что можно за 10-15 минут получить исходники модулей.

    Reply
  48. ROM_1C

    🙂

    Reply
  49. Chuba73

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

    Однако если к базе подключается 3ий и более пользователей, то они при входе получают сообщение «You excess counting register users!», хотя вроде все трое работают дальше без ограничений.

    Reply
  50. DimanYa

    У 1С открытые модуля и благодаря этому 1С быстро завоевала свою часть рынка. А шифрование модулей это уже отказ от первоначального принципа развития платформы. Как то нехорошо и неправильно

    Reply

Leave a Comment

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