<?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='\
Отлично!
Но если у клиента отключен JS?
(1) Хочет посмотреть демку — включит 🙂
Гениально просто!
Попробовал. Получилось.
Может надо как-то по особенному настраивать HTML Guardian?
O-Planet, не мог бы ты выложить какую-нибудь готовую защищенную обработку? Или хотя бы зашифрованный тобой html-файл?
Очень интересно, надо взять на заметку
(5) А это как если не секрет? 🙂 Я что-то в сети мало нашел инфы про дешифрование гуардиана.
Если кому-то кажется что HTML Guardian — не серьёзно, то всегда можно выбрать любой из имеющихся в сети шифровальщиков:http://www.securitylab.ru/software/1232/
(А интересно, получится наложить один на другой? 🙂 )
Кстати, обновил обработку. Появилась возможность контроля корректной совместимости текстов запроса с html и более продвинутые возможности по подготовке файлов.
Блин. Досадное недоразумение… В спецификации были перепутаны местами аргументы в методе «Добавить» у списка. Голову сломал, прежде чем нашел. Исправил…
(7) Ты опять наступаешь на те же грабли, что и в голден кее для семерки. Любое шифрование подразумевает под собой момент дешифровки. Чтобы браузер смог отобразить HTML-страничку, она должна быть расшифрована.
Впрочем, я в этих всяких веб-технологиях ничего не понимаю.
У меня стоит Google Chrome (нравится мне он очень!), открыл в нем сформированную с помощью HTML Guardian страничку, полюбовался на сплошные рекламы, и открыл через меню «Управление текущей страницей» — «Разработчикам» — «Консоль JavaScripts». И, о чудо!, вижу там расшифрованный исходный текст HTML странички. Свою функцию увидел я там в таком виде:
Показать
Ну тут понятно, русские буквы заменены на их коды в кодировке Unicode. Написав маленькую обработку по преобразованию такого текста я получил
Показать
В общем слов нет. Как и защиты.
(11) Ты вот скажи, от юзеров оно защитит? 100%! Даже гуардиан. Но я ведь написал, что он — не окончательный вариант. Имеются более интересные перекодировщики. Сейчас подготовлю одну коммерческую разработку, как ты и просил, и попробуй… 😉
(11) Вот по этой ссылкеhttp://www.belkamag.ru/index.php?priceorg:download качай «Прайс-органайзер 8.1». Типа программка, как и обещал…
(12) Для защиты от простых юзеров пойдет и пароль на модуль. По крайней мере пока, твоя защита не кажется сильнее пароля на модуль. Однако, подождём обещанную защищенную коммерческую разработку.
(13) Вскрылось на ура!
Макет1 у тебя — это HTML, закрытый каким-то PowerHTML.
Вот, для примера, одна из функций:
Показать
Если разрешишь, выложу все))
Макет2 — внешняя обработка с запароленным модулем, в котором одна функция:
Ну и сам внешний отчет с запароленным модулем….
Этого достаточно? Так как УТ у меня нет, то твой отчет я ни разу не запускал, и в чем состоит ограничение (а так же, что он делает)- понятия не имею. Или надо разобраться до конца?
(15) Так его, болезного.
(0) Опять на Golden Key нашелся Ferrous Lock? 😀
(15) дежа вю… 🙂
(15) Ты крут и монстЁр 😀 Что ж, так и придется самому писать перекодировщик js, поскольку не умеют буржуи ничего. И еще 30 у.е. за такое просят. Впрочем, смею предположить, что не все смогут так легко найти то, что хотят. И потому это остается в силе: «Golden Key 8.1 Prototype с успехом может использоваться для защиты демо-версий недорогих коммерческих разработок.» Но, как выяснилось, не на Инфостарте, потому как тут сидит awa…
(16) Да я и рад, в общем-то. Мне лучше здесь увидеть все, чем от клиентов получать сюрпризы. И у меня есть идейки, как все это обойти. Только нужно время. Вот ты скажи, почему в «коммерческих» шифраторах html нельзя было не тупо шифровать текст, а хотя бы динамически его формировать в процессе выполнения скрипта? Как пример — сделать виртуальную скрипт-машину, исходный код заменить набором смайликов, и по ним выполнять сценарий? NTKrnl так и работает, в общем-то…
(17) Ты ваще не в теме…
(18) Семки на галерке заканчиваются;-)
💡 Даешь starforce в каждую обработку.
Так и будет… Реально, зацепил одну идею… Не хватает катастрофически времени.
Пример 1
Процедура Кнопка1Нажатие(Элемент)
Сообщить(ЭлементыФормы.ХТМЛ.document.parentWindow.hello());
КонецПроцедуры
не работает — ЭлементыФормы.ХТМЛ.document.parentWindow.hello() возвращает COMОбъект
Пример 2 не работает — та же ерунда.
ну и сама обработка тоже не работает.
JS-разрешил , проверил на хтмл файлах из примерах.
Я не спец по IE8, поэтому считаю данное решение сильно ограниченным. Больше гемора решать проблемы нерабочей обработки из-за IE у клиента, чем продать ещё пару.
Сам использую похожий способ, но без IE8, а через JS Shell. Текст скрипта в макете зашифрован самим скрипом с паролем, и если пароль не верный, то функции не работают вообще. Для триала отдельный пароль и отдельный макет со скриптом с огрниченным функционалом.
Хотелось бы напомнить, что 1С задумывалась как открытая система.
Думаю что демку всегда можно сделать просто вырезав ключевой функционал или просто сделать хорошую презентацию, если уж мы начинаем претендовать на оригинальные идеи.
То, что один человек сделал — другой завсегда сломать сможет (Народная мудрость).