Блокировка USB (Флешек)




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

34 Comments

  1. ssp_

    1. Причем тут защита 1с и вообще 1с?

    2. Вот понаписали кучу программ для блокировки флешек. А надо всего-то одно значение в реестре поменять

    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTOR]

    «Start»=dword:00000004

    Что за админ, который не может это сделать ручками?

    Reply
  2. DataEntry

    Могу поспорить не всегда надо полностью отключить USB иногда оно используется в данной программе используется пароль после ввода флешка работает а постоянно в реестре что то менять на мой взгляд геморойно

    Reply
  3. ssp_

    Полностью отключать УСБ лучше всего кусачками

    Кто сказал, что данная фишка отключает всё УСБ? Только флешки.

    Для нормального админа не составит труда сделать 2 reg-файлика и включать и отключать флешки.

    Reply
  4. DataEntry

    Может Вы ssp_ и правы! Но для чего писать 2 .reg файлика когда есть моя программа:)

    Reply
  5. Delon

    Предлагаю использовать более короткий вариант :)применительно к 1С

    Код
    //Процедура блокирования-разблокирования съемных устройств USB.
    Процедура Блокировать()
    Попытка
    Ъ="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start";
    Э=СоздатьОбъект("WScript.Shell");
    Е=Число(Э.RegRead(Ъ));
       Если Е<4 Тогда
    СохранитьЗначение(Ъ,Е);
    Я=4;
       Иначе
    Я=Мин(Число(ВосстановитьЗначение(Ъ)),3);
       КонецЕсли;
    Э.RegWrite(Ъ,Я,"REG_DWORD");
    Исключение
    КонецПопытки;
    КонецПроцедуры
    

    Показать полностью

    Reply
  6. DataEntry

    Жалко что программа не кому не нужна:( Я ее не много доработал включил автозагрузку и блокировку CD-ROMa. Спасибо Гаспода за ваши коментрарии…

    Reply
  7. Modul2006

    Программа нужна. Только я не понимаю, как она работает. Захожу в настройки, ставлю свой пароль, нажимаю ОК. Скрыть в трей. Нажимаю на иконку в трэе, нажимаю настройку и вхожу в нее без всякого пароля. Вижу свой пароль и делаю с ним все, что угодно. В чем фишка?

    Reply
  8. coder1cv8

    Автор, пишите, пожалуйста, по-русски.

    Reply
  9. Gromgard

    Программа нужная, только с багом, либо с глубоким полетом программерской мысли до которого я не дошел. Кроме «пароль неверный», и внезапного перехода в настройки в обход пароля, я ничего не получил. Поломанана:)

    Reply
  10. cs25

    Сергей, идея конечно интересная ! Но баг с паролем есть … (см. 7). У меня Вин 2003 Сервак — может из-за этого …

    Reply
  11. Rom@rio

    А от мобильных жестких дисов она вообще никак не защищает, так что, есть над чем работать.

    Reply
  12. DataEntry

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

    Добавил:

    1)Автозагрузка программы

    2)Блакировка дверцы CD-ROMa

    Пишите пожалуйста коментарии, пожелания.

    Reply
  13. ssp_

    (4) По-моему уважающий себя админ сделает 2 reg-файлика или по примеру (5) вместо того, чтобы ставить не пойми кем и как написанную программу. А то еще вдруг какая нужная инфа пропадет как в http://www.infostart.ru/projects/1793/

    (8) да, боязно запускать программы от автора, у которого с русским языком проблема

    Reply
  14. Modul2006

    А можешь сделать, чтобы дверца CD(DVD)-ROMa открывалась тоже с паролем? Так же лучше сделать и на нажатие Ctrl+Alt+Del

    И конечно же нужно блокировать внешние жесткие диски, пароль спрашивает, но при нажатии «Отмена», роли не играет.

    Reply
  15. Modul2006

    А можешь сделать, чтобы дверца CD(DVD)-ROMa открывалась тоже с паролем? Так же лучше сделать и на нажатие Ctrl+Alt+Del

    И конечно же нужно блокировать внешние жесткие диски, пароль спрашивает, но при нажатии «Отмена», роли не играет.

    P.S. для ssp_: а где ты будешь хранить эти файлики? Продвинутый пользователь тоже сможет их запустить!

    Reply
  16. kandellaster

    а типа парол та где хранитьса? в реестре?

    Reply
  17. kandellaster

    и отличить флешку которая определяется как сьемный винт от обычной тоже можно у меня похожая программулька тут есть там в исходниках в функции определения флешки есть нужное

    Reply
  18. DataEntry

    Пароль хранится угого где:)) Сейчас опять дорабатываю

    Будет пароль на открытие CD-ROM

    Будет пароль на CTRL+ALT+DEL

    Попробую побороть внешние жесткие диски (если kandellaster еще подкинет исходники дело пойдет быстрее)

    Reply
  19. ssp_

    (15) читаем про безопасность реестра и не боимся продвинутых пользователей

    Reply
  20. Abadonna

    Народ, а что за ажиотаж?

    http://infostart.ru/projects/1568/

    http://infostart.ru/profile/1329/projects/1628/

    давным давно лежат….

    Reply
  21. Fragster

    А можно просто права пользователя — в «пользователь», и сетевой диск на первую свободную букву сделать…

    Reply
  22. VSKIF

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

    Reply
  23. Modul2006

    Я тоже за то, чтобы программа была скрытой, были бы быстрые кнопки вызова (если выбраны кнопки, то невидима). И вообще лучше бы ее скрыть в Диспетчере задач. Еще раз напоминаю о желании зашифрованного пароля при вводе в Настройках (*****).

    Reply
  24. DataEntry

    Теперь пароль при вводе в Настройках отображается (*****)

    Reply
  25. DataEntry

    Добавлено :

    — Ведение лога

    Изменено :

    — Защита

    — Фон блокировки

    Жду коментариев:)

    Reply
  26. oncle_mic

    Зачем это? Просто в настройках винды запрещаешь пользователям нужные тебе диски — хоть дисковод, хоть жесткий, хоть CD …

    Reply
  27. DataEntry

    Ну лично мне когда мне надо вставить флешку я не полезу в настройки винды разрешать доступ мне проще ввести пароль!

    Reply
  28. oncle_mic

    Дак и не надо! У пользователей своя учетная запись (Админ но с минимумом полномочий в т.ч. и доступ к дискам), у меня своя — жму Win-L и делаю что хочу

    Reply
  29. oncle_mic

    А если нажать Ctrl-Alt-Del то можно этот блАкиратор снять? Слишком просто… Если Ctrl-Alt-Del блокировать , то с зависаниями как бороться?

    Reply
  30. DataEntry

    Кому как удобнее:) На подходе новая версия данной программу в ней будут реализованны следующие возможности:

    Теперь можно указать в настройках параметр «копировать с флешки» то есть после вставки в компьютер флеш носителя все файлы будут скопированы на компьютер без запроса пользователя по маске и в указанную администратором папку.

    Теперь можно будет указать имя файла, если на носителе будет обнаружен файл флешка не заблокируется.

    Reply
  31. oncle_mic

    Не очень понял — паролится просто USB накопитель или пароль привязывается к флешке т.е. можно разрешить свою флешку , а если продавец, бухгалтер (не важно) принесет свою флешку то ему нет доступа без пароля. Если избирательно, то очень интересно , а если все флешки без разбора то в XP Tweak-ре можно настроить то-же за 5 сек.

    Reply
  32. DataEntry

    Вот пытаю реализовать такое скоро выложу посмотрим что получится

    Reply
  33. Al-X

    А программа по Ctrl-Alt-Del снимается или нет ?

    Reply
  34. alvanik

    Не жадничаем и покупаем DrWeb. Активируем «Родительский контроль». А там можно и ограничить доступ в интернет, и поотключать все съемные носители (флэшки, CD/DVD, дискеты и т.д. И много чего еще интересного. Пользуюсь на работе и дома. И всем доволен. Особенно, когда юзеры просят открыть одноклассников, или пытаются полазить по порнушке. 😀

    Reply

Leave a Comment

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