Добрый день, уважаемые коллеги! Сегодня мы детально рассмотрим и разберем крайне важную проблему информационной безопасности и контроля делопроизводства в программе 1С:Документооборот 2.1 на платформе 8.3.
Типичная и крайне неприятная ситуация: в организации успешно запущен и работает процесс согласования документов (например, договоров). Документ проходит все этапы, согласовывается ответственными лицами, утверждается руководством и регистрируется. Однако внезапно выясняется, что «умелые» пользователи нашли лазейку. В карточке уже согласованного документа в окне прикрепленных файлов они нажимают кнопку «Еще», выбирают пункт меню «Обновить из файла на диске...» и заменяют согласованный файл на свой, измененный. При этом сама карточка документа заблокирована для редактирования, но файл успешно перезаписывается.
Давайте проанализируем причину возникновения этой проблемы и подробно, по шагам разберем все возможные варианты ее решения в зависимости от того, какая версия программы у вас установлена — КОРП или ПРОФ.
Для того чтобы понять, как бороться с этой уязвимостью, давайте проанализируем архитектуру хранения данных в 1С:Документооборот. Многие начинающие специалисты считают, что если документ заблокирован (его реквизиты недоступны для изменения), то и прикрепленные файлы автоматически защищены. Однако это техническое заблуждение.
В системе 1С:Документооборот файлы документов хранятся в отдельном справочнике Файлы, а их физическое содержимое и история изменений — в справочнике ВерсииФайлов. Когда пользователь нажимает кнопку «Обновить из файла на диске...»:
ВерсииФайлов.Файлы.ВнутренниеДокументы) технически не перезаписывается и никак не изменяется.Поскольку карточка самого документа при этом действии не перезаписывается, стандартная блокировка формы документа по состоянию игнорирует создание новой версии файла. Платформа 1С позволяет пользователю записать новую версию файла в базу данных, если у него есть права на изменение файлов в системе (на уровне ролей или прав доступа к папке файлов).
Теперь рассмотрим, какими методами мы можем закрыть эту уязвимость.
Если в вашей организации развернута версия 1С:Документооборот КОРП, проблема решается за пару минут в пользовательском режиме без привлечения программистов и изменения кода конфигурации. Разберем этот процесс по шагам:
Согласован, Утвержден, Зарегистрирован.После этого система на уровне бизнес-логики заблокирует любые попытки обновить, заменить или удалить прикрепленные файлы для документов, перешедших в защищенные состояния. Кнопка «Обновить из файла на диске» станет неактивной. Для проверки и аудита заданных правил подойдёт обработка для анализа настроек доступности по состоянию.
В версии ПРОФ штатный механизм доступности по состоянию отсутствует. Тем не менее, у нас есть несколько отличных альтернативных вариантов защиты данных.
Поскольку платформа 8.3 поддерживает механизм расширений, мы можем быстро решить проблему без снятия конфигурации с поддержки. Нам необходимо перехватить событие записи новой версии файла и заблокировать транзакцию, если связанный документ уже согласован или зарегистрирован.
Давайте рассмотрим пример программного кода, который нужно разместить в модуле объекта справочника ВерсииФайлов в нашем расширении:
&Вместо("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ)
// Исключаем проверки при автоматической загрузке данных
Если ЭтотОбъект.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
СсылкаНаФайл = ЭтотОбъект.Владелец;
Если ЗначениеЗаполнено(СсылкаНаФайл) Тогда
// В Документообороте 2.1 документ-владелец доступен через реквизит ВладелецФайла справочника Файлы
ДокументВладелец = СсылкаНаФайл.ВладелецФайла;
Если ЗначениеЗаполнено(ДокументВладелец)
И (ТипЗнч(ДокументВладелец) = Тип("СправочникСсылка.ВнутренниеДокументы")
Или ТипЗнч(ДокументВладелец) = Тип("СправочникСсылка.ВходящиеДокументы")
Или ТипЗнч(ДокументВладелец) = Тип("СправочникСсылка.ИсходящиеДокументы")) Тогда
// Получаем текущее состояние документа из регистра сведений
СостояниеДокумента = РегистрыСведений.СостоянияДокументов.ПолучитьПоследнее( , Новый Структура("Документ", ДокументВладелец)).Состояние;
Если ЗначениеЗаполнено(СостояниеДокумента) Тогда
// Проверяем критические состояния
Если (СостояниеДокумента = ПредопределенноеЗначение("Перечисление.СостоянияДокументов.Согласован")
Или СостояниеДокумента = ПредопределенноеЗначение("Перечисление.СостоянияДокументов.Зарегистрирован"))
И Не РольДоступна("ПолныеПрава") Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Запрещено изменять файлы! Связанный документ находится в состоянии '" + СостояниеДокумента + "'.";
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
КонецЕсли;
КонецПроцедуры
Этот код надежно заблокирует перезапись файлов на уровне базы данных для всех пользователей, не обладающих полными правами администратора.
Если мы хотим обойтись без программирования, проанализируем права доступа к папкам. В 1С:Документооборот права на добавление и изменение файлов наследуются от папок, в которых лежат документы.
Мы можем выстроить следующий регламент:
После перемещения документа права пользователя автоматически урезаются, и при попытке обновить файл система выдаст стандартную ошибку ограничения прав доступа.
Этот способ не запрещает изменение напрямую, но делает любую несанкционированную подмену абсолютно бесполезной, так как она сразу станет явной. Давайте посмотрим, как это настроить:
При активации этой опции система автоматически фиксирует и запоминает хеш-суммы файлов на момент завершения процесса согласования. Если кто-то из сотрудников после этого обновит файл измененной версией, то при выводе Листа согласования или карточки документа на экран система выдаст яркое предупреждение о том, что файл был изменен после согласования. Это полностью исключит возможность незаметного подлога документов. Для автоматической фиксации результатов процесса в карточке можно использовать инструмент для сохранения листа согласования после окончания согласования.
Если в вашей организации используется функционал электронной подписи, это гарантирует стопроцентную защиту файлов от модификации. При согласовании или утверждении документов ответственные лица подписывают файлы своей ЭП. Любая попытка обновить подписанный файл из файла на диске приведет либо к автоматической блокировке действия системой, либо к мгновенному уничтожению («слету») электронной подписи. Документ без подписи сразу потеряет легитимность и вызовет вопросы у аудиторов и службы безопасности.
Давайте также обратим внимание на шаблоны процессов согласования. В свойствах этапа «Согласовать» есть важный флажок — «Разрешено редактирование файлов».
Если он установлен, пользователи могут легально изменять файлы и вносить правки в процессе согласования (например, по замечаниям коллег). Убедитесь, что эта опция отключена, если вы хотите полностью запретить любые изменения файлов даже во время самого процесса согласования.
Мы надеемся, что предложенные методы помогут вам надежно защитить документы вашей организации от несанкционированных изменений и навести порядок в процессах делопроизводства!