Создание дополнительных потоков команд невозможно 1с
Начиная с версии технологической платформы 8.3.9 средства для работы с двоичными данными претерпели существенные изменения. В этой статье я постараюсь рассказать как о старых, так и о новых инструментах для работы с двоичными данными. При написании статьи использовалась версия технологической платформы 8.3.12
Общая информация
Если раньше, до версии технологической платформы 8.3.9, мы располагали только объектом ДвоичныеДанные, то к настоящему времени у нас имеется целый набор объектов, которые серьезно расширяют наши возможности по манипуляциям с двоичными данными. Рассмотрим все эти объекты чуточку подробнее.
Двоичные данные
Экземпляры объекта ДвоичныеДанные содержат двоичные данные, которые считываются из файла. При это объект ДвоичныеДанные является достаточно многофункциональным — мы можем:
- читать двоичные данные из файла и записывать их в файл;
- передавать их между клиентом и сервером при помощи временного хранилища;
- передавать и получать их по сети;
- хранить их базе данных в реквизитах вида ХранилищеЗначения;
- превратить двоичные данные в объект вида Картинка (при определенных условиях конечно);
- хранить двоичные данные в макетах;
- шифровать и расшифровывать, подписывать и проверять подписи;
Наверняка я что-то пропустил, но главное должно быть понятно — несмотря на значительное развитие средств работы с двоичными данными, объект ДвоичныеДанные остается ключевым.
Потоки
Это группа объектов назначение которых заключается в работе с потоками данных.
Поток — этот объект представляет собой поток данных из которого можно читать и/или записывать в него данные. Данный объект не имеет конструктора, а получить экземпляр объекта можно при помощи различных методов других объектов.
ФайловыйПоток — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в файлах на диске.
ПотокВПамяти — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в оперативной памяти.
МенеджерФайловыхПотоков — этот объект предоставляет типовые методы для работы с файлами (открытие и создание). Создать экземпляр этого объекта нельзя — имеется объект глобального контекста ФайловыеПотоки который и предоставляет доступ к методам менеджера.
Чтение и запись
ЧтениеДанных — этот объект предназначен для чтения различных типов данных из различных источников (потоки, файлы, двоичные данные).
РезультатЧтенияДанных — этот объект содержит описание результата чтения данных из потока. Объект не имеет конструктора, получить экземпляр объекта можно при помощи методов других объектов.
БуферДвоичныхДанных — этот объект представляет собой коллекцию байтов фиксированного размера, имеется возможность произвольного доступа и изменения по месту.
ЗаписьДанных — этот объект предназначен для записи различных типов данных в приемник.
Практическая часть
Итак, у нас достаточно много различных объектов, которые, в свою очередь, имеют много разных свойств и методов. Разобраться во всем этом более подробно помогут практические примеры, к ним и перейдем.
Многие объекты — ДвоичныеДанные, Поток, ФайловыйПоток, ПотокВПамяти, ЧтениеДанных, ЗаписьДанных, РезультатЧтенияДанных имеют пары синхронных и асинхронных методов, например: Записать — НачатьЗапись, Закрыть — НачатьЗакрытие. Асинхронные методы нужны для обеспечения возможности одинаковой работы и в тонком клиенте, и в веб-клиенте.
Подробнее про синхронные и асинхронные методы можно прочесть в этой статье.
Двоичные данные
Ниже приведены примеры основных операций с объектом ДвоичныеДанные.
Сама концепция потоков проста. Вы можете мыслить их как корабль, отправляющийся в дальнее плавание. На Марс, например. Вроде как и можно устроить сеанс связи с Хьюстоном, но это геморрой, поэтому нужно на корабль погрузить все до старта, и только после возврата вы сможете разобрать трофеи. Лучше всего - запустить и забыть. Даже если вы запустите 20 кораблей, то возвращаться они будут по одному. И на каждом будет написан его бортовой номер, чтобы вы могли их отличать.
Как-то так.
И точно потоки не помогут вам ничего рисовать на экране или двигать компоненты. Зато они могут все рассчитать для этого, создать битмапы и заполнить какие-то структуры данных. А вы уже в главном потоке все это будете использовать для вывода на экран.
Часто путают поток ОС с классом TThread
Это не одно и то же. TThread призван запомнить все данные, нужные в потоке, запустить поток в операционной системе, выполнить действие в нем и вернуть результат.
Жизнь потока состоит из трех этапов
1. создание и инициализация (это еще не поток с т.з. ОС)
2. запуск настоящего потока (вот тут настоящий поток ОС работает)
3. окончание работы потока
Обратите внимание! В пунктах 1 и 3 работа идет в главном потоке, там, где формы и пользовательский ввод.
Только 2-я часть уходит в автономное плавание, забирая с собой все переменные, которые вы ей насовали с собой в части 1
Начнем
1. Нужно создать своего наследника TThread, имеющего все нужные поля. Заполнить эти поля. Запустить поток.
Примечание.
Все дополнительные классы выносите в дополнительные юниты! Пусть класс TMyThread будет жить в UMyThread.pas
UMyThread мы должны прописать в uses у формы, откуда будет запускать свои потоки.
Юнит UMyThread ничего о форме знать НЕ ДОЛЖЕН!
Лирическое отступление
Класс TThread имеет замечательное свойство FreeOnTerminate. Если установить его в true, то не нужно будет хранить ссылку на созданный объект, чтобы потом удалить его вручную. Создали, запустили и забыли о нем. Память освободится сама. Сделать это лучше всего, переопределив конструктор нашего наследника, где и вписать FreeOnTerminate := true;
В том же конструкторе мы должны вызвать конструктор предка - класса TThread - с параметром true
Это значит, он не запустится сразу же, а даст нам сначала заполнить поля объекта, а мы потом его запустим командой Resume. (В свежих версиях Delphi вместо Resume нужно вызывать Start)
3. Главное. Как мы получим данные от потока?
У класса TThread есть обработчик OnTerminate. Если на него назначить нашу собственную процедуру, то она будет вызываться после Execute для каждого потока. Это удобно. Дважды удобно то, что OnTerminate работает уже в главном потоке и не надо ничего делать для синхронизации, можно прямо писать в компоненты, например выводить в мемо, или заполнять структуры данных, не боясь, что другие потоки тоже лезут туда. Все синхронизировано по факту. Поэтому это лучший метод возврата результата из потока.
Итак. Объявим метод формы с любым именем, лишь бы параметры были Sender: TObject
Для красоты и простоты переопределим конструктор нашего наследника, чтобы можно было указывать этот метод
Примечание.
Рекомендуется не заполонять систему своими потоками. 3000 потоков вашей программы почти с гарантией поставят систему на колени. Поэтому одновременно запустим N потоков. После окончания каждого одного будем запускать один следующий, пока не стартуем нужное нам количество. При этом активно всегда будет не более N потоков.
Итак, сценарий.
Запустить N потоков.
При завершении - проверять, нужно ли запустить еще, или нет.
Также проверять, если все потоки завершены, то подвести итог.
Кнопку запуска потоков сделаем неактивной до времени, когда закончится последний поток, чтобы нельзя было запустить процесс еще раз.
Реализация
Репутация: 737
Top Releaser
В этой теме обсуждаем косяки, проблемы и прочие непонятки с Windows 7 оригинальной Microsoft.
Репутация: 440
Постоялец
Путь диску присвоен (в управлении дисками)?
Галочка "скрывать пустые диски" снята?
Репутация: 737
Top Releaser
Путь диску присвоен (в управлении дисками)?
Галочка "скрывать пустые диски" снята?
Присвоил букву, все заработало, спс.
Репутация: 118
Постоялец
Ultimate x86 RC 7100
откатывает без моего участия настройки приложения. исключительно, если приложение однажды перестало отвечать. оказалось для меня сюрпризом.
таким образом я лишился некоторых настроек в квипе, медиа плеер классике и еще паре прог. пришлось заново настраивать.
Репутация: 440
Постоялец
Репутация: 43
Дух
ага, либо злые духи =)))
При установке демон тулза система просит установить драйвер STPD или как-то там, устанавливаю, потом ДТ просит ребутнуть комп, делаю, после ребута ДТ запускает установку и опять сетупит тот же драйвер, после чего опять уходит в ребут и так до бесконечности . проблема в 7 или в ДТ и драйвере? Было у кого-то такое?
Репутация: 3021
Кошки-это хорошо
Репутация: 44
Дух
В сборке 7600 и DT c STPD 1.58 проблемма опять появилась
Говорят исправляется переустановкой STPD 1.59, но сам не проверял - юзаю UltraISO
Репутация: 3021
Кошки-это хорошо
Вобщем-то последний SPTD всегда можно стянуть отдельно с оффсайта (UA-IX)
PS 7600 не юзаю. Этот самопал курам на смех. На RC все путем и со старым 1,58. В финале, думаю, тоже все будет нормально.
Репутация: 2396
Справжній Львяра
люди, имейте совесть. эта тема создана для решения проблем с RTM билдом.
нафиг нам глюки ваших RC или левых сборок?
Репутация: 1429
Sphynx in Mirror
А что - правило о содержательности названия темы уже отменено?
Где в названии такое сказано?
Репутация: 440
Постоялец
При чём тут название. Windows 7 есть релиз rtm. До него беты, рк.
Сборки на основе 7600 ещё ладно, но прошлые билды, они имели свои баги и должны обсуждаться в
соответствующих темах "Проблемы с beta/pre-rc/rc/pre-rtm Windows 7"
Не нужно мешать всё в одну кашу.
Репутация: 1429
Sphynx in Mirror
Я что-то пропустил?
Официальный релиз планировался не то на октябрь, не то на ноябрь вроде.
А все, что до него - все равно остается в той или иной степени бетой, как ты его ни обзови.
Репутация: 440
Постоялец
Почему же? Отличие его от того что 22 сентября он будет записан на диск и файлы будут иметь новую цифровую подпись. Ну 5% вероятность, что ударит мс сервера молнией и будет новая сборка.
Репутация: 3021
Кошки-это хорошо
Вероятность такая, кста, очень высока. Это я не про молнию, а про внесение изменений.
Репутация: 174
нечто более красивое
ага, либо злые духи =)))
При установке демон тулза система просит установить драйвер STPD или как-то там, устанавливаю, потом ДТ просит ребутнуть комп, делаю, после ребута ДТ запускает установку и опять сетупит тот же драйвер, после чего опять уходит в ребут и так до бесконечности . проблема в 7 или в ДТ и драйвере? Было у кого-то такое?
Удали ДТ, удали STPD, поудаляй все папки с ним связанные, и почисть руками реестр (regedit.exe) от всего что связано с Daemon Tools и STPD. Мне помогло.
Репутация: 3021
Кошки-это хорошо
DT не ставится, пока не поставит (сам, либо руками юзера) SPTD. Соответственно никаких папок и записей в реестре не имеет.
Репутация: 174
нечто более красивое
Оно выбивает ошибку описанную автором в 2х случаях:
а) после деинсталяции ДТ а затем попытке его инсталляции.
б) после обновления сборки на более новую.
Если в реестре записей нет, то все становится отлично, проверено мной на ~5 сборках.
Репутация: 393
Развадила :)
Я что-то пропустил?
Официальный релиз планировался не то на октябрь, не то на ноябрь вроде.
А все, что до него - все равно остается в той или иной степени бетой, как ты его ни обзови.
+1 насколько я знаю на данный момент все образы РТМ собраны из россыпи файлов, оригинальных ИСОшников вроде еще не было.
Репутация: 1429
Sphynx in Mirror
Дык нет такого релиза все равно.
А призывы к совести по поводу вопросов о бетах - есть.
Не забываем историю с Vista, когда всем призводителям ТВ-тюнеров пришлось в срочном порядке переписывать драйвера - под RTM все работало, а под официальным релизом - вдруг накрылось.
Давайте здесь будем делиться способами настройки новой ОС средствами самой операционной системы
(без использования сторонних программ).
Всё то, что считаете удобным, нужным, полезным.
Много текста под тэг CUT , ссылки под тэг HIDE не менее 5.
Цвет Начальнога экрана меню "Пуск" может быть настроен при установке Windows 8. Однако это только настройка цвета.
После установки Windows 8 можно настроить цвет, фон, поэкспериментировать с ним, выбрать наиболее удобный. Также настроить можно и экран блокировки.
Для того, чтобы изменить оформление темы интерфейса, то есть выбрать сочетание цветов и узора фона, следует пройти в раздел «Параметры компьютера» -> «Персонализация» -> «Начальный экран». Самый быстрый способ вызвать приложение настроек является нажатие сочетание клавиш «Win» + «I», а затем выбрать внизу панели «Параметры» пункт «Изменить параметры компьютера».
Кроме Начального экрана там можно настроить и другие элементы.
А нормальный пуск как вернуть?
В Windows 8 Consumer Preview (бета-версия операционной системы Windows 8) — это делалось посредством реестра следующим образом:
1 — Для начала следует запустить Run (Выполнить), нажав сочетание клавиш WIN + R на клавиатуре.
2 — Затем открыть редактор реестра, набрав «regedit» в поле Open (Открыть) и нажав клавишу Enter. (Примечание: regedit набирать без кавычек).
3 — Потом необходимо найти ветку «HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Explorer» в редакторе реестра и нажать двойным щелчком мыши на пункте Explorer.
4 — После этого в правой панели редактора реестра нужно найти пункт RPEnabled, нажать на нём правой клавишей мыши и выбрать пункт Modify… (Изменить) из меню.
5 — В открывшемся диалоговом окне следует изменить поле Value Data (Значение) с 1 на 0 и нажать кнопку OK для сохранения изменений.
6 — Осталось лишь перезагрузить ПК, после чего меню Пуск в Windows 8 изменится на классическое.
Но это всё работало в бета-версии.
В финальной версии Professional - этот способ возврата меню "Пуск" не проходит.
То ли в Майкрософт этот способ напрочь прикрыли, удалив из финальной сборки все файлы, посредством которых можно было вернуть меню "Пуск", то ли еще что-то нужно сделать.
sas111, бывает еще так, если в корне диска очень много файлов, и при его открытии система всем им меняет время доступа.
aciden,
Подвисает где-то примерно на минуту, потом открывает диск.
ED_Sln,
Файлов много, но раньше такого не было.
sas111, насчет 7 точно не скажу, а вот в ХР если неправильно поставился тип папки (музыка, видео, картинки), то при открытии такого диска или папки все очень затормаживается.
Скажите, пожалуйста, если "восьмерку" (или "семерку") инсталировать на раздел, на котором хранятся файлы (но системы_там нет!) - файлы сотрутся или сохранятся?
Спасибо.
Да он и так разбит у меня на разделы! Мне нужно поставить систему именно в тот раздел, где находятся файлы, которые некуда переместить. И систему нужно установить в тот же раздел. Поэтому вопрос остается. :oops:
Так, например, "семерка" при инсталяции вроде ничего не форматирует, там даже запроса на такую функция, кажется, нет. А "старую" систему, если таковая находилась на диске, куда инсталируется "семерка", она оставляет, перемещая в папку "OLD".
Ладно, придется искать куда скопировать файлы, не буду рисковать.
Спасибо за участие.:)
P.S. После установки отпишусь как "все прошло". :yes:
Можно ли настроить классический вид меню "Пуск"?
В финальной версии Windows 8 средствами самой ОС настроить классический вид меню "Пуск" нельзя (по крайней мере ранее известный способ возвращения "Пуска" Майкрософтом заблокирован). Поэтому только сторонними программами.
В другой теме я публиковал способ настройки альтернативного "Пуска" средствами самой системы;
"Вернуть" меню "Пуск" в Windows 8:
Замена меню Пуск полноэкранным стартовым меню – это, возможно, одно из самых противоречивых изменений в Windows 8.
Есть возможность воссоздать меню Пуск из Windows 7 и более ранних версий ОС. Однако оно будет выглядеть немного по-другому.
В принципе, следуя данному совету, вы просто создадите новую панель инструментов в панели задач, которая будет открывать папку меню Пуск, оставшуюся в Windows 8 для совместимости.
1) Поэтому перед началом необходимо запустить режим рабочего стола. Затем открыть окно проводника, выбрать "инструменты" (Tools) и нажать "опции" (Options). Убедитесь что параметр "показывать скрытые файлы" выключен, затем нажмите OK.
Теперь щёлкните правой кнопкой мыши на пустой области панели задач рабочего стола, выберите подменю "Панель инструментов" (Toolbar), затем "Новая панель инструментов" (New Toolbar). (Рисунок 1)
2) Выберите папку X:\Program Data\Microsoft\Windows\Start Menu (Главное меню), где X – это буква диска, на котором установлена Windows 8. (Рисунок 2)
В итоге получаем:
Вместо Start Menu (Главное меню) можно указать (выбрать) папку "Программы" по тому же пути: X:\Program Data\Microsoft\Windows\Start Menu (Главное меню)\Программы.
P.S. меню "Пуск" в стиле "Метро" тоже можно удобно настроить, отсортировать программы, что я и сделал, привык его использовать - использую, удобно.
Если перетащить курсор в левый нижний угол экрана, то появится значок "Пуск" - щелкните по нему правой кнопкой мыши - там через появившееся контекстное меню есть доступ и к другим системным функциям. В общем, вопрос привычки.
Добавлено через 5 минут
Кстати, кто знает, как в контекстное меню Пуска добавить другие команды? Например, чтобы оттуда запустить Центр обновления Windows.
Значить це так. Если нажимать поменьше кнопок во время установки - то ничего не сотрется. :) Другими словами - можно перед установкой найти и использовать функцию "форматирования диска" - тогда, конечно, да. А так - нет. :)
Спасибо за участие и посильную помощь. Удачи Вам.
Коды ошибок и их расшифровка при работе с Windows
Имею: установленный в win8 гаджет DriverInfo. Вид у него какой-то расплывчатый:
В третьей части я показал пример обращения ко всем возможным методам, и как работать с длительными операциями.
В четвертой части показал, как работать с порциями.
для обмена данными между информационными системами;
для обмена данными с сайтами и порталами;
Клиент формирует запрос к веб-серверу.
Дальше запрос проходит какие-то проверки – проверяются заголовки, параметры, тело запроса (если сервис использует тело запроса).
Если все проверки пройдены, то выполняется некий метод в вашей конфигурации и формируется ответ с кодом состояния:
обычно, если все нормально отработало, код состояния равен 200;
если что-то пошло не так, код состояния может отличаться;
есть методики, когда используется JSON RPC – в этом случае код состояния всегда равен 200, а в теле запроса в определенной структуре JSON содержится ответ, где в параметре error пишется, какие были ошибки.
Есть ли какая-то универсальная микстура или принцип, как сделать определенные шаги для обеспечения безопасности всех сервисов, которые вы создаете? Такой микстуры, к сожалению, нет. Но есть какие-то практики, которые люди применяют в своей работе.
Настройте регулярное создание бэкапов
Простая проверка администратора на профпригодность – это поручение «Восстанови на тестовой базе вчерашний бэкап». Если администратор сможет восстановить бэкап только месячной давности, нет причин с ним дальше работать. За месяц многое может поменяться, поэтому такие вещи недопустимы, и не дай Бог с вами это произойдет.
Для чего нужен сервис?
Кто конечный потребитель?
Будет ли сервис выставлен наружу?
Эти три простых вопроса позволяют понять, какие вещи необходимо будет произвести для обеспечения безопасности.
GET для безопасных действий, POST для небезопасных
Дальше нужно определиться с тем, по каким методам будет работать ваш сервис – будет ли он использовать только GET или POST, или он будет использовать смешанные методы.
GET вызывает так называемые безопасные действия – он получает параметры и отдает некие данные из информационной базы.
POST предназначен для более опасных действий – если вы хотите передавать логин-пароль, то GET для этих случаев не подойдет, лучше передавать в теле POST.
Чтобы определиться, какой метод вам больше подходит, есть картинка, которая очень наглядно помогает выбрать тот или иной метод.
Повторюсь, что основные минусы GET по сравнению с POST – это то, что запрос можно кешировать, запросы могут оставаться в истории браузера, параметры передаются в URL, и GET не предназначен для передачи больших объемов данных.
Это – наглядный пример MITM-атаки.
Let’s Encrypt – лучше, чем самоподписанный сертификат, но есть минусы
Часто встречается, что приходишь в какую-то крупную организацию, и там используют самоподписанные сертификаты. Если сервисы используются для внутренних целей, этого достаточно. Но если вы собираетесь выставить сервис наружу для обновления какого-то мобильного приложения, такой самоподписанный сертификат не подойдет. Лучше использовать бесплатный сервис Let’s Encrypt.
Но у сервиса Let’s Encrypt есть минусы по сравнению с платными сервисами:
Нет гарантии, что с Let’s Encrypt не случится то же самое, что случилось со Startcom и Wosign. 5 лет назад был случай, что крупные производители браузеров перестали им доверять – эти сертификаты потеряли доверие.
Еще нет гарантии сертификата. Например, если клиент зайдет на сайт, который подтвержден сертификатом платного центра, и потеряет деньги в результате фишинга, то эти платные центры обязуются выплатить некую сумму (от 10 тысяч долларов до 1.5 миллионов долларов).
И основной минус – у Let’s Encrypt сертификаты выдаются на 3 месяца. С другой стороны, есть готовые скрипты, готовые боты, которые продлевают сертификат. Для Apache – это certbot, а для IIS – это win-acme.
Разделите сервисы
Соответственно, если вашу фирму начнут проверять на прочность, вздрогнет вся система, и работать будет невозможно.
Поэтому я не зря изобразил на слайде подводную лодку: если в ней случается пробоина, закупоривается один отсек, а остальная часть подводной лодки продолжает функционировать. Я тоже рекомендую разносить внутренние сервисы на одну машину, а сервисы, которые должны общаться с внешним миром на другую, возможно, даже на несколько машин.
Опубликуйте сервис и настройте на него права
Если вы организовываете внутреннюю сеть, достаточно внутри сети поставить веб-сервер – это может быть Apache, IIS, это может быть 1С:Публикатор или 1С:Линк (это тоже Apache, просто его версия от фирмы 1С с красивым интерфейсом).
К паролям нужно относиться очень бережно – про это я чуть дальше расскажу. Желательно, чтобы у сотрудников были хорошие пароли.
Используйте VPN
Если вам нужно организовать удаленный офис либо объединить в единую сеть магазины или сеть точек общественного питания, используйте для администрирования VPN – этого достаточно.
Организуйте промежуточное звено
Есть варианты с промежуточным сервисом:
Один из таких вариантов был показан на онлайн-митапе «Web-клиенты для 1С». Есть некий промежуточный сервис, написанный на каком-то стороннем языке, этот сервис смотрит наружу, получает запросы от клиентов, организует для этих запросов некие квесты – накладывается фильтрация, проверяются токены, организуется ограничение частоты вызова определенных методов или двухфакторная аутентификация. Только тогда, когда все эти квесты пройдены, запрос идет во внутреннюю сеть. Вариант неплохой, рабочий, многие его используют.
Есть еще вариант с промежуточной базой, которая получает запросы, отслеживает, что в этом запросе все хорошо, и тогда уже передает его во внутреннюю систему.
Получается, что эти промежуточные звенья принимают первый удар на себя, а если с ними что-нибудь случится, ваша информационная база будет в безопасности.
То же самое можно делать и другими средствами:
можно установить файрвол, который ограничивает доступ, делает фильтрацию IP, закрывает порты;
за файрволом можно поставить реверсный прокси, на котором тоже настроены какие-то фильтры – реверсный прокси-сервер может выполнять функцию балансировки – он разграничивает нагрузку между сервисами и дополнительно уменьшает трафик за счет кеширования.
Это тоже рабочий вариант.
Пройдите аудит ИБ
Даже если у вас все отлично настроено, все отлично работает, можно еще произвести аудит информационной безопасности. Это актуально, поскольку система развивается, в ней появляются новые дыры, и их надо своевременно отслеживать.
Какие-то фирмы проводят аудит раз в полгода, кто-то – раз в год. Какие-то фирмы начинают проводить аудит только тогда, когда с ними что-то случается.
Но проводить аудит – дело полезное. Вы получите обратную связь, получите отчет о том, что было проделано, узнаете, какие у вас есть дыры в безопасности. Если у вас нет возможности проводить аудит своими силами, есть сторонние организации, которые этим занимаются.
Проводите постоянный мониторинг
Нужно производить постоянный мониторинг системы. Даже если у вас все работает, следовать правилу «Работает – не трожь» не совсем правильно. Система работает до тех пор, пока вы ее обслуживаете. Соответственно, можно настроить какие-то сборы метрик, можно проверять логирование. В 2019 году на Инфостарте был очень хороший доклад «Ок, Лариса! Мониторинг проблем производительности с применением нейронных сетей». Докладчик рассказывал о том, как у них некая нейронная сеть отлавливает некие изменения в системе и на основании этих изменений делает какие-то действия, сообщает о каких-то ошибках.
Если пойти этим же путем, анализировать все эти метрики, логи, то в принципе тоже можно сделать такого автоадминистратора, который все эти вещи будет сам отлавливать. Я думаю, что даже в каких-то крупных ИТ-гигантах такие вещи уже сделаны и успешно работают.
Храните логи в недоступном от злоумышленников месте
О чем еще важно помнить? Допустим, у вас есть логи, которые вы храните не очень защищенно. Логи тоже могут иметь некую конфиденциальную информацию.
Например, в логах хранится заголовок запросов с базовой авторизацией. Соответственно, если злоумышленник получит эти логи, он их без труда декодирует и получит доступ к вашей базе под этой учетной записью.
Относитесь к паролям бережно
Еще раз напомню, что к паролям нужно относиться бережно. В практике моей компании был один случай: до 2018 года у нас администратора не было, состояние системы было подзаброшено, и мы наняли очень хорошего администратора, чтобы он все настроил. А потом директор решил проверить, действительно ли теперь все так хорошо, и обратился к моему коллеге, попросил его за хорошее вознаграждение взломать систему. У меня коллега далеко не хакер, он просто 1С-программист, который знал, что в компании есть некая база, которая опубликована наружу. Он открыл эту базу через браузер, быстро подобрал пароль к учетке пользователя-администратора с правом открытия внешних обработок, вошел в базу, открыл в ней обработку и сделал принтскрины, доказывающие, что у него полный доступ ко всем данным. Пароль был 123.
Как перечеркнуть все усилия по обеспечению безопасности
В феврале этого года я выложил статью «Выполнятор – как я породил монстра и лишился сна!». Это случай из 2017-го года. Я тоже человек грешный, я реализовал некое очень страшное решение через метод «Выполнить()».
Самое интересное, что такие статьи выходят на Инфостарте регулярно, я примерно раз в месяц вижу новую статью с таким решением.
Если я вижу такую статью, я пытаюсь пообщаться с автором и объяснить, почему так делать не стоит – об этом я расскажу дальше.
Все эти «Выполняторы» работают по одному принципу с небольшими отличиями:
кто-то передает текст команды,
кто-то передает текст команды и параметры,
кто-то передает текст запроса и параметры;
кто-то передает просто текст запроса.
Дальше это все попадает в некий метод «Выполнить()», где все это выполняется. Это некий троянский конь, через который с вашей системой можно что угодно сделать, вплоть до очистки всех данных.
Есть статья на ИТС «Ограничения на использование Выполнить и Вычислить на сервере». Если вы решили сделать универсальное решение, то ознакомьтесь с этой статьей, все вопросы уйдут.
Когда я общался с авторами, я интересовался, почему они сделали такое решение:
Некоторые, как и я, хотели выйти из конфигуратора – статья про «Выполнятор» как раз показывает, что так делать неправильно.
Кто-то говорил, что ему не нравится писать код в двух местах – в конфигурации-источнике и конфигурации-приемнике.
Основные минусы «Выполняторов»:
Практически невозможно отловить неоптимальный код. В базе-источнике будет видно только то, что выполняются некие методы. Вы не отловите, какой там код в какой момент пришел.
Плюс вы постоянно пересылаете весь код и параметры, что тоже нехорошо. Это то же самое, как если вы придете в библиотеку, положите перед библиотекарем три тома «Войны и мир» и спросите: «Что написано во втором томе на 300-й странице в пятом параграфе?» Получается, что вам, чтобы спросить какую-то вещь, нужно постоянно носить эти книжки. Это тоже не совсем хорошо.
И возможность потерять все свои данные – я про это уже говорил.
Стояла задача создать мобильное приложение, которое будет обмениваться с ERP. Мы планировали его устанавливать на планшеты пользователей и настраивать силами сотрудников ИТ-отдела.
Для этой цели у меня в ERP был создан план обмена, на узле которого хранится не логин/пароль, а некий сформированный хэш. И с мобильного приложения тоже гоняется не логин/пароль, а некий хэш. Эти хэши сравниваются и обмен производится только при их совпадении.
алгоритмы и методы – это отдельные справочники;
различные методы логирования;
запуск фоновых заданий для алгоритмов.
можно указать конкретный метод, который будет обработан;
на закладке «Параметры» рассчитываются параметры, которые будут использованы на закладке «Вычисления»;
указывается алгоритм, который формирует ответ от базы;
можно задать заголовки ответа и т.д.
Учитывая, что система универсальных методов уже была, на разработку полноценного рабочего окружения для мобильного приложения ушло 3 недели.
Заключение
Плюс заказчик получает готовую функциональность, реализацию которой не нужно оплачивать – все можно сделать силами одного 1С-ника.
Вопросы
Какие вы можете порекомендовать средства для хранения паролей к внешним сервисам, с которыми интегрируется 1С?
1С рекомендует использовать для этого безопасное хранилище. Но я обычно делаю свое хранилище значений. И в нем уже в определенной структуре храню такие вещи.
В кейсе про мобильное приложение, о котором я рассказывал, я не гоняю пароль в явном виде, я просто гоняю некий хэш.
Вы говорите про то, как хранятся пароли внутри 1С, а снаружи? Если нужно обмениваться паролем между командой разработки и инфраструктурщиками? Используете ли вы какие-то сервисы для этого?
Можно хранить секреты в файле на сервере с ограниченным доступом, либо в специальном сервисе. В базу добавляем ПараметрСеанса, в который будем считывать секреты, и запрещаем доступ к этому параметру сеанса.
Вызов внешнего сервиса делаем таким образом
Если базу выгрузить, то секреты никуда не утекут.
Какие VPN-сервисы рекомендуете для внутренних сервисов? Или лучше написать свой?
OpenVPN – самый распространенный, используем его.
Как правильно выставлять сервис наружу? Лучше всегда закрывать веб-сервисы, которые выдаются наружу? Или в каких-то случаях не закрывать?
Если для вас это будет очень больно, лучше этого не делать. Если вы обслуживаетесь у каких-то аутсорсеров, а вас начнут проверять на прочность, то вам нужно будет сначала дозвониться, дождаться, когда специалист с вами через час свяжется, и только потом вам, может быть, помогут. В таких условиях лучше ничего не выставлять наружу.
Если вам нужно обмениваться с сайтом или сторонним сервисом, есть хорошие средства, я про них в докладе уже упоминал.
А есть какие-то готовые инструменты для защиты базы от внешнего доступа? Какими сервисами можно воспользоваться 1С-нику?
Очень многие используют nginx, это хорошее программное обеспечение, его можно использовать как реверсное прокси для балансировки и фильтрации запросов.
Данная статья написана по итогам доклада (видео), прочитанного на онлайн-митапе "Безопасность в 1С". Больше статей можно прочитать здесь.
Читайте также: