Кеш и защитные ограничения ObjectModule


НАЧАЛО >> Оглавление >> Сервер приложений ИРБИС 64/128 >> Ядро системы >> ObjectModule >> Кеш и защитные ограничения ObjectModule📄 Скачать в DOCX


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

1. Кеш настроек и записи модуля

При инициализации модуля настройки читаются из записи типа MODULE. После чтения состояние сохраняется в ключ ModuleOpts/<ModuleName>. При следующем обращении модуль может восстановить значения из кеша без повторного чтения записи и разбора административных переменных.

SID записи модуля хранится отдельно в ключе ModuleRecordsCache/<ModuleName>. Этот ключ используется, когда системе нужно быстро получить запись модуля по имени.

Если настройки изменились, нужно сбросить кеш модуля через ClearCache() или через действие, которое его вызывает. Сброс удаляет оба ключа:

2. Связь с кешем Record

Запись модуля является обычной записью Record. Поэтому на нее дополнительно распространяется кеш содержимого записи:

Это означает, что при диагностике устаревших данных нужно различать два уровня: кеш параметров модуля (ModuleOpts/ModuleRecordsCache) и кеш содержимого конкретной записи (Record_Content/Record_SidMap). Подробнее см. кеширование содержимого записи и SID.

3. Безопасные имена модулей и функций

UseModule() принимает только имена из латинских букв, цифр и символа _. Если имя содержит другой символ, функция возвращает null и формирует предупреждение. Такая проверка защищает от подстановки пути вместо имени модуля.

UseClass() удаляет последовательности .. и нулевой байт из имени класса перед построением пути к файлу в classes.

Магический метод ObjectModule->__call() проверяет имя внешней функции перед загрузкой файла из папки __call. Имя с недопустимыми символами или .. не загружается.

4. Параметры действий связей

Методы LinkAdd() и LinkDrop() получают параметры через General->GetRequest(), а не напрямую из $_REQUEST. Это сохраняет единый путь чтения входных параметров и упрощает дальнейшую валидацию.

5. Практическая диагностика

Если после изменения настройки модуль продолжает работать со старым значением, нужно проверить:

  1. что сохранение записи модуля завершилось без ошибки;
  2. что был вызван сброс кеша модуля;
  3. что проблема не связана с отдельным кешем записи Record_Content_*;
  4. что в код не передается динамическое имя модуля или внешней функции с недопустимыми символами.