TestIB8x - Безопасный код - Option Explicit

27.12.07

Администрирование - Информационная безопасность

Предварительное решение следующей ситуации: "Мы берём некую "универсальную" экспортную функцию, включаем её в свою конфигурацию и эта функция в качестве побочного эффекта затирает значения наших переменных (уровня приложения, уровня модуля, ...)."

А откуда бы автор этой функции мог догадаться, что мы будем использовать такие же "редкие" идентификаторы как "Валюта", "Индикатор", прочее ... ;-)!?

Желающих приглашаю к обсуждению данного решения, может что важное упущено?


Безопасный код – Option Explicit


Категория: Безопасный код
Название: Option Explicit
GUID: 5c11d53e-1dda-4ccb-9ce2-4ea01a9a142c
Версия: 1 от 26.12.07

Введение

Достаточно распространенной является ситуация, когда некая универсальная функция, объявленная с ключевым параметром Экспорт, в своём теле содержит присваивание неявно объявленных переменных.

В этом случае существует вероятность того, что в функции, вызывающей эту универсальную функцию используются переменные с таким же именем, в результате чего, после выполнения универсальной функции, значение такой переменной в вызывающей функции будет изменено.

Пример:
Перем  х;
Функция  Универсальная()   Экспорт

х = 1;
Сообщить("Внутри функции: "+ х);

Возврат "";
КонецФункции 

Функция ИспользуетУниверсальную() 

х = 6;
	
	
Сообщить("До вызова функции: "+ х);
Рез = Универсальная();
Сообщить("После вызова функции: "+ х);

// В этом месте значение х будет равно 1, // а должно быть х = 6 
Возврат "";

КонецФункции 

 


Для исключения подобных коллизий необходимо проверить каждую экспортную функцию на предмет полноты блока объявления переменных.

Но, как мы понимаем, это очень тяжелая задача для любой достаточно сложной функции. Поэтому помощь компьютера будет не лишней.

Реализация

При программировании универсальной функции любая внутренняя переменная должна быть объявлена в блоке объявления переменных. Использование переменных уровня приложения, внешнего соединения или модуля желательно свести к минимуму и "всячески документировать".

Тестирование

В данной версии документы, переменные общего модуля, модуля внешнего приложения и уровня модуля не отслеживаются как исключения.

В ходе теста формируется готовый, предположительно правильный блок объявлений переменных, который можно вставить в тело экспортной функции.

Шаг 1 Проверка общих модулей


Для каждой экспортной функции:
1. Создать список объявленных переменных
2. Найти все переменные из операции присваивание
3. Сформировать, при необходимости правильный блок объявлений переменных

Шаг 2 Проверка модулей объектов и модулей формы


1. Создать список реквизитов объекта
2. Создать список объявленных переменных
3. Создать список переменных модуля
4. Найти все переменные из операции присваивание
5. Сформировать, при необходимости правильный блок объявлений переменных

См. также

Проверка часового пояса

Информационная безопасность Универсальные функции Платформа 1С v7.7 Бесплатно (free)

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    12817    kudenzov    3    

10

Злоумышленник зашифровал базы 1С и другие файлы

Информационная безопасность Защита ПО и шифрование Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Звонит пользователь, на экране сообщение ваши данные зашифрованы, введите пароль, пишите письма и т.д.

1 стартмани

08.11.2014    40288    44    aleksch21    85    

47

Отчет по правам пользователей для любой конфигурации "1С:Предприятия 7.7"

Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Инструмент для наглядного анализа и сравнения наборов прав доступа в 1С 7.7 Работает в любых конфигурациях. В одной из обслуживаемых мной баз 40 наборов прав пользователей (120 пользователей). Этим отчетом очень наглядно выходит анализировать разницу в правах и просто описывать права пользователей в документации. Обновлено: - В новой версии отчета добавил сравнение двух разных баз и анализ внешней БД. - объекты метаданных представлены в виде дерева (объект "Дерево-Таблица значений" FormEx)

1 стартмани

11.02.2014    25235    163    Amel2010    15    

14

Проверка прав доступа текущего пользователя. 1с 7.7

Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Украина Абонемент ($m)

Показывает права доступа текущего пользователя в базе 1с 7.7 .

1 стартмани

10.06.2013    20915    49    demon_sw    11    

6

Индивидуальная установка даты запрета редактирования документов в торговле 1С 7.7

Информационная безопасность Закрытие периода Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Управленческий учет Абонемент ($m)

Установка даты запрета редактирования документов индивидуально для каждого пользователя,а также предоставление в индивидуальном порядке разрешения изменения конкретных документов в определенные периоды или в конкретные дни.Срок действия установок устанавливается вами. Вы можете спокойно настроить и уехать в отпуск.

1 стартмани

17.01.2013    31034    50    agent007_1    10    

4

Управление правами в 7.7 - "на лету" до каждой кнопочки!

Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Система управления правами доступа "на лету" для конфигураций на платформе 1С:Предприятие 7.7. - Онлайн :: Не требует выхода пользователей. - Умная :: Позволяет управлять доступом хоть к каждой кнопке на форме. - Универсальная :: Встраивается в любую конфигурацию за 1 минуту! - Преемственная :: Сохраняет настройки существующих наборов прав.

1 стартмани

22.11.2012    34578    171    gavlexx    48    

39

Блокиратор запуска Информационной Базы

Инструменты администратора БД Информационная безопасность Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Блокирует запуск Информационной базы при входе пользователя

1 стартмани

25.10.2012    15146    14    sam-soft    9    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3119 27.12.07 15:16 Сейчас в теме
2. vasilykushnir 63 27.12.07 16:40 Сейчас в теме
Дык это вроде азы... Как бы основа "правильного" стиля программирования. Честно говоря за конструкцию

Перем х;

Функция Универсальная() Экспорт
х = 1;
Сообщить("Внутри функции: "+х);

Возврат "";
КонецФункции

сразу в дыню надо давать - функция принимает параметры через вызов и отдает результат через Возврат, все остальное д.б. внутри априори.
3. vasilykushnir 63 27.12.07 16:45 Сейчас в теме
Хотя ты, пожалуй, прав - каких только "чудачеств" не увидишь...
Поэтому статью считаю полезной для начинающих типа "Я только начал изучать1С, как мне написать конфигурацию с нуля для металлургического завода?". И посему будет +1
4. Shaman100M 1150 29.12.07 10:59 Сейчас в теме
Каждый раз, по завершении причесывая код, занимаюсь подобной глазоломалкой..., - неплохая идея автоматизировать этот процесс. При окончательном формировании блока объявлений добавил бы к проверяемым спискам еще параметры самой функции и переменные-параметры вызываемых процедур и функций
Оставьте свое сообщение