<?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='\
(0) зачем это нужно?
скорее бы уже боты вытеснили живых программистов и все ЯП, кроме асма и байт-кода ушли в историю.
тогда будет только работа, а не придумывание всякой ерунды.
(0) понимаю, что хочется защитить свой продукт, но хотелось бы пофилософствовать на эту тему — насколько выигрышна такая стратегия разработки кода? всем заранее спасибо за предоставленные ответы
(3) 100500 раз обсуждали тут, на мисте и пр..
вывод — «запутывания кода» от лукавого.
(3) Иногда это единственная возможность получения денег за работу. Не будьте сказочным эльфом, ирл достаточно жадных упырей для которых кинуть кого то вроде спорта.
(1)для защиты своих разработок. Чтобы после определенной даты планируемой оплаты обработка перестала работать.
Вам никогда не приходилось самим вытаскивать дебиторку с заказчиков?
Да этот метод не даёт 100% гарантии защиты, можно байт код разобрать, но думаю не честный заказчик наврятли не заплатив одному программисту наймёт другого, чтобы он разбирался в защищённом коде. Тем более, что этот метод защиты занимает один клик.
(3), (5) так не работайте с такими, и всем рассказывайте про таких, отдайте конкурентам — много не потеряете… не доводите дебиторку до больших сумм… какие у вас примеры из жизни? у меня вот 120 тыс однажды полгода не платили, 60 тыс до сих пор и 5 тыс не заплатили…. но продолжать работать с ними — себе хуже делать….
Название функции «ф2021()» уже само является обфускацией 🙂
(3)Можно открыто сказать что это не дает 100 % защиты — можно взломать через байт код (например если модуль исключен), если в форме там код исключить нельзя, значит можно посидеть и разобрать этот код (я так и сделал при анализе обработки [2 in 1] «Обфускация кода 1С» и «RegExp Тестер»).
Вопрос только во времени, если провести эту защиту стоит нажать одну кнопку, а разобрать потом нужно много времени (иногда больше чем написать заново), почему бы не применить защиту.
(7)А что хорошего, когда вы подарили 60 тыс? Почему кто-то должен работать за бесплатно?
Когда то на 1CLanser — видел сообщение от разработчика — что заказчик не честный и он поменял ник уже несколько раз, т.е. разработчик тратит время на месть чтобы следить за заказчиком, а зачем в это время можно курсы 1С посмотреть например?
«так не работайте с такими» — 100 % не угадаешь я такого способа не знаю….
«и всем рассказывайте про таких» — мне не хочется тратить на это время, есть более интересные занятия.
(8)после выполнения обработки, еще интереснее))
,а если серьезно — 2021 это номер символа куда вставляется процедура.
А дополнение к времени использования можно добавить:
Показать
(12) к этому:
(12)вы не написали самое главное — описание функции — КлиентНеНадёжен() )))
При работе с обработкой другой сценарий, вначале задаем дату после которой код перестанет работать, если до этого времени прошла (или после того как обработка перестала работать :)) оплата то передаем доработки с открытым исходным кодом.
(13)Осталось сделать базу надежных заказчиков)) — это идея для следующей разработки))
(14)
Так тут всё просто:
(14)
такое уже делал раньше. Потом стал клиентов лучше отбирать.
Но тема интересная, в силу концепции 1С об открытости кода.
Иногда это нужно.
(16)тогда, лучше отправлялось письмо президенту, о не добросовестном закачке — эффективнее))
Сколько уже можно про это говорить: обфускация исходника 1С без отклонения от потока выполнения — это почти бесполезное занятие. Для защиты надо обфусцировать п-код!
(19)подскажите такую обработку или методику для обфускации п-кода.
Тут кто на что горазд. Но есть и коммерческие решения, типа WiseAdvice.
(21)по вопросу вскрытия кода я уже отвечал выше, открыть можно. Вопрос только во времени. Сомневаюсь, что не честный заказчик не заплативший за разработку начнёт заниматься декомпиляцией кода 1с.
Декомпилировать обфусцированный код, тоже то ещё удовольствие, все же имена переменных изменены.
(21)про WiseAdvice читал, netlenka1с тоже предлагает обфускацию п-кода. это коммерческие решения в живую их не использовал.
(10)
я 10 раз окупил потери, переместив акцент на работу с теми, кто платит.
надо искать долгосрочные отношения и чтобы, когда работаете и не переживаете «залпатят/не заплатят».
(10)
специально ходить и рассказывать как глашатай не надо. если коллеги спросят. почему бы не рассказать. такой принцип.
(10)
риски есть в любых делах, просто минимизируйте их — разбейте проект на подзадачи с оплатой фактически выполненных работ. Поясните в устной форме, что надо проверить друг друга на состоятельность — вас на профпригодность, Заказчика на финансовую состоятельность.
(22) были случаи, когда модули паролились,в итоге в одной мед.программе я перестал использовать типовой календарь (сетку расписания) врачей, написал свою сетку расписанияhttps://infostart.ru/public/664095/ , таким образом родилось вполне адекватное решение на тех же самых регистрах, запись и чтение регистров я написал СВОИ
как только вижу закрытый модуль, то сразу его обхожу — пишу свои методы, кроме случаев,
когда работа связана с внешним оборудованием или матем. алгоритмами.
Самое главное это долгосрочные доверительные и дружеские отношения с заказчиком, тогда и запутывать ничего
не не нужно будет.
Если бы мне как заказчику такое принесли, то сомневаюсь на дальнейшее сотрудничество, пойди разбери что за «бомба» там вшита, а с ненадежными и дело иметь не нужно.
Как ваша программа поведет себя в строке типа
?
Какие слова зашифрует, подскажите плз
(25)
Главное чтоб ваш работодатель не знал, что вы изобретаете велосипед за его счет)
p.s. про безопасность можете не писать. это далеко не всегда оправдывает подобные решения
(27)
или
Замениться переменная на новое имя идентификатора.
(29)
И ваша обработка поймет, что третье слово «Запрос» заменять не нужно? или ее надо как то обучить этому?
(22)Обычно нет нужды разбираться глубоко в обфускированных исходниках — когда они есть — для того, чтобы просто снять защиту — тут да, чисто финансовый вопрос — если разработка дорогая и очень нужная заказчику — он её вскрорет за существенно меньшие средства (либо своими силами — затрты на время своих сотруджников мало кто считает), либо сторонними.
Конечно же, когда исходники восстановить автоматически не возможно (как в ряде коммерческих решений защиты), когда часть кода зашифрована и выполняется после расшифровки как «выполнить» (увы — создавать внешние обработки из потока пока нельзя — а было бы круто), или располагается во внешних компонентах, или, как шик — вообще вынесена в HASP ключ — где алгоритм и выполняется. Тогда да — такая защита действительно очень трудна для вскрытия — мало кто на это решится, даже для очень дорогих разработок!
А для дешёвых разработок обфускация скорее будет являться отталкивающим фактором — если нет возмдности покапаться в исходниках — то проще взять другое решение или сделать самому. Остальные реальные покупатели купят в любом случае — будет или не будет решение иметь защиту — без разницы — т.е. итоговый доход с обфускацией может быть меньше, чем без неё — т.к. часть купивших будет одинаковая — но другую часть потенциальных покупателей обфускация отпугнёт от покупки.
И помните — что более менее серьёзным заказчикам важно видеть код целиком — чтобы в нём не было встроенных «зловредов» — без этого они разработку могут даже не смотреть — отдел ИБ всё равно не пропустит!
Для обхода ограничений по комментариям с кавычками можно использовать замену строк исходного кода на текст обрабатываемый корректно и возвращать его обратно при получении результата. Например заменить «https://infostart.ru/public/959902/» на «СайтПроекта», а потом вернуть обратно.
Поясните, пожалуйста, что тут за проблема и как она решается?
(30)Что Вас так удивляет?
Например:
Будет в результате:
(32)Комментарии при обработке удаляются. строковые данные при этом должны остаться. как написать это условие на регулярных выражениях я еще не придумал.
Получается у нас могут быть ситуации:
Код по случаю 1 будет удален полностью как комментарий и это правильно.
По случаю 2 получиться:
без закрывающих кавычек, что приведет к ошибкам при работе.
По случаю 3 получиться:
что тоже правильно.
Резюмируя: комментарии удаляются полностью, там где они должны остаться для корректной работы программы и делается подмена (можно задать в настройках), а потом в результате заменяется обратно.
В примере «https://infostart.ru/public/959902/» — будет заменен на «https: — что не корректно, поэтому он вначале заменяется на корректно обрабатываемую строку «СайтПроекта».
Еще нюанс с многострочным текстом, он переводиться в одну строку — если нужно сохранить исходное форматирование, то работаем с ними точно так же.
Вот пример еще одной обфускации, полученной из байт-кода
Ну не плохо, не плохо. Делал себе такую лет 12-15 назад на 7.7, использовал в качестве имен переменных различные сочетания букв «ООООО» латиницы и кириллицы, получалось очень лампово. Потом пришел к тому, что кроме меня это никому не мешает.
Ностальгия.
(25)
(36)
Elisy, каким способом это было сделано?
(36)
Elisy, подскажите каким методом сделали такую защиту.
(39) Этот пример прилетел ко мне не онлайн-декомпилятор. Каким способом он был получен, не знаю.
Публикация обфускаторов и подобных методов защиты вне зависимости от качества почему-то вызывает ощущение шизофрении. Они конечно имеют право на жизнь, но как-то нехорошо и неуютно
(41)Наверно на это несколько причин:
1) Конфигурации типовые распространяются с открытым исходным кодом. Складывается впечатление, что все коды должны быть открыты, потому что такая политика вендора.
2) Средств защиты доработок сама платформа предоставляет мало (Пароль на модули и исключение исходных текстов из поставки).
3) Проще разобраться в поведении системы когда имеются исходные коды.
Но,
1) Сама платформа себя хорошо защищает и не предоставляет исходные коды.
2) Отраслевые конфигурации созданные даже партнерами 1С хорошо защищены.
3) Например в ЗУП 3.1.10 появилась вставка:
1С довольно щепетильно относиться к своим правам и понимает, что интеллектуальная собственность стоит денег. И будет свои права защищать.
Поэтому, понятен ажиотаж в темах защиты разработок: с одной стороны платформа не дает 100% способов защиты исходных текстов, с другой и 1С и сторонние разработчики стремятся защитить свои разработки.
1. Не работайте с клиентами без договора!!!
2. Не работаете с клиентами без предоплаты!!!
Вот вы разработали тиражное решение с закрытым кодом, вы его поддерживаете получаете +100500 млн рублей, а завтра бац и покинули этот мир. Думаю все ваши клиенты скажут вам огромное спасибо.
Те кто шифруют код в принципе не понимают элементарных вещей, кто хочет кинуть или халявы, никогда не заплатит. Мне таких клиенты встречались, я даже думаю, что мои разработки по инету ходят и мои курсы на складчинах висят, но таковых всего 1-5% от общего числа. Чем больше вы даете бесплатно, тем больше вы получаете от жизни обратно.
(43)
2. Не работаете с клиентами без предоплаты!!!
1. вы о чем? o_O
2. подскажите, плз. какую предоплату брать с клиента, чтоб заранее компенсировать вероятное выкладывание им моих работ на бесплатных для скачивания ресурсах?
(44) 100 стартмани
(43)
Те кто шифруют код в принципе не понимают элементарных вещей, кто хочет кинуть или халявы, никогда не заплатит. Мне таких клиенты встречались, я даже думаю, что мои разработки по инету ходят и мои курсы на складчинах висят, но таковых всего 1-5% от общего числа. Чем больше вы даете бесплатно, тем больше вы получаете от жизни обратно.
Это ваше мнение, которое вам кажется верным, но с вами многие не согласятся, так как у них есть на это свое, обратное вашему, которое тоже является справедливым
(44) разрабатывая интеллектуальную собственность, будте готовы к пиратству, или на вашем компьютере нет ни одной пиратской программы/книги? Еще раз повторю, те кто ищет пиратскую версию никогда не купят вашу лицензионную продукцию.
(46) Да, это мое мнение, и чужое мнение я уважаю, вот только справедливости в мире нет ))) и искать ее не стоит. И судя по вашему обратному мнению, вы считаете что от жизни надо только брать и не давая ничего взамен. И клиенты, купившие разработку, всегда говорят разработчику спасибо, за закрытые исходные коды )
(47)
Те ребята еще более активно ведут борьбу с пиратством и используют системы шифрования гораздо более мощные чем мы)
Множество примеров есть, когда пытались залесть в код декомпилятором, потом возвращались
и покупали платную версию (отслеживал по никам на тематических форумах).
Ну и в конце концов. если бы не коммерческая реализация продукта и защита от копирования, я бы вряд ли стал его развивать и тратить время на его поддержку (как и любой квалифицированный программист).
(48)
нет вы не правы) поспешный вывод
(49)
Ну значит я не квалифицированный программист и зря трачу время на развитие и продажи своей разработки.
(49)
Рад что на это у вас есть время
(49)
Общался с крупными разработчиками, конкретно из Jetbrains, пиратов они не любят, но относятся к ним спокойно.
(51)
вот может когда я выйду на такие же объемы, то так же как и они начну к подобным людям относиться спокойно.
а без этого никак. нужно оценить риски и принять соотв.меры
возможно. не знаком с вами)
(51)
Что значит относятся к ним спокойно? — значит их исходные коды можно копировать и использовать?
Коллеги, в данном вопросе мне нравиться пример 1С.
46 ) ) ))
— покажите мне исходные коды платформы, (к комментарию (
— защита 1С (программные, физические),
мы все знаем, чтоее можно сломать, но 1С же от этого не начинает раздавать свои исходные коды в открытом виде.— например конфигурация ТОИР — попробуйте ее открыть)) там даже в коде написано «Если вы удалите эту проверку, это вам НЕ поможет, программа все равно работать не будет…».
Если крупные фирмы защищают свою интелектуальную собственность, почему это не должны делать фрилансеры и программисты 1С?
(53) вы либо реально не понимаете контекста, либо утрируете. Имеется ввиду программное обеспечение разработанное с помощью 1С, или IDE от Jetbrains. Давайте ещё сайты начнём шифровать.
Уверен, что ПО с открытым исходным кодом зарабатывает больше. Так как клиент зачастую выбирает отрытые коды, когда есть альтернатива.
(53) покажите мне закрытый исходный код в 1С:ERP
(55)Зачем закрывать код в ERP?
1C ERP защищает по другому, в коде есть вставка:
Когда у меня в подчинении будет столько же юристов сколько у 1С, наверно я рассмотрю и другие способы защиты.
(54)
В таком случае покажите мне исходные коды движка Инфостарт.
(56)
Кто хочет ищет возможности, кто не хочет ищет отговорки. Мое отношение к закрытому коду однозначное, код должен быть открыт и защищен авторским правом.
При наличии конкуренции, и похожего функционала, клиент купит разработку с открытым кодом. Вопрос про открытый код мне задают примерно 80-90% покупателей моих разработок.
И я вам скажу еще одну страшную вещь, я даже предоставляю бесплатные обновления без подписки на техническую поддержку. И по факту этой возможностью пользуются всего 2 моих клиента, остальных полностью устраивает текущий функционал.
(57) вот мне интересно, вы реально думаете, что на инфостарт мир клином сошелся? Вы с web разработкой знакомы? Судя по исходному коду главной страницы инфостарт, сайт сделан на «движке» Битрикс. Идетеhttps://www.1c-bitrix.ru/download/cms.php по этой ссылке и скачиваете исходники движка и тыкните мне там пальцем в закрытый код. Хотя вы наверное опять напишите, что у вас нет штата юристов.
Короче, дальнейший диалог считаю вести смысла нет. Я никому не навязываю свою точку зрения, кто выиграет в данном споре, покажет рынок. Готов клиент платить за закрытый исходный код при наличии конкурентного продукта с таким же функционалом или нет. Я думаю ответ очевиден.
Люди закрывающие свои разработки не понимают, что пытаясь ухватить максимум вы упускаете другие возможности. И ваш продукт существует на рынке ровно до тех пор пока не появится конкурент с открытым исходным кодом.
Желаю вам удачи, ведь разработать продукт это одно, а вот суметь продать его — это совершенно другое!
Извините, если было описано, но я не нашёл — подходит ли обработка для модулей форм, отчетов и обработок в т.ч. внешних ?
(60)
Обработка работает только с текстом модулей (не меняет сами отчеты и обработки).
Модули форм с директивами компиляции обрабатываются. Остальные модули так же обрабатываются.
Здесь важно другое, часть идентификаторов не должна заменяться.
Например для внешней обработки, нельзя заменять имена реквизитов обработки (чтобы в модуле с ней корректно работать). При обработке модуля обычной формы нужно оставить идентификаторы функций модуля без изменения, чтобы к ним можно было обратиться — за этим нужно следить и отключать изменение некоторых идентификаторов.
Чтобы каждый раз не проверять список не изменяемых идентификаторов их можно описать в параметрах в тексте модуля через парметр «GlobalVar »
(61)Спасибо, вроде бы, понятно