Обмеження на виконання «зовнішнього» коду на сервері
1.1. Для прикладних рішень, що працюють у моделі сервісу, заборонено виконання будь-якого коду або текстів запитів на сервері 1С:Підприємства, які не є частиною самого прикладного рішення (конфігурації).Див. також
1.1. Для прикладних рішень, що працюють у моделі сервісу, заборонено виконання будь-якого коду або текстів запитів на сервері 1С:Підприємства, які не є частиною самого прикладного рішення (конфігурації).
Приклади неприпустимого виконання «зовнішнього» коду:
- зовнішні звіти й обробки (друковані форми тощо), а також будь-які інші аналогічні можливості, за допомогою яких користувачі підключають до конфігурації зовнішній код;
- алгоритми вбудованою мовою, тексти запитів або їх фрагменти, які користувачі інтерактивно вводять у режимі 1С:Підприємства, і які потім передаються до методів глобального контексту Виконати або Обчислити);
- зміна користувачами схем компонування даних у звітах, у яких дозволено використання зовнішніх функцій (цю можливість закрито під час використання стандартної форми звіту: вона не дає користувачам змінювати схему компонування даних, а з користувацьких полів не можна використовувати функції спільних модулів). Зокрема, можливість завантаження користувачами схем компонування даних із зовнішніх файлів.
Ця вимога зумовлена, насамперед, вимогами до надійності сервісу. Зовнішній код, навмисно або ненавмисно, може становити загрозу працездатності сервісу.
Обмеження не поширюється на код, що виконується на клієнті.
1.2. Під час розробки рішень, що працюють у моделі сервісу, потрібно враховувати, що небезпечним є не лише безпосереднє виконання коду, написаного в режимі Підприємство, а й ті місця, де методами Виконати або Обчислити виконується код, сконструйований на основі параметрів, переданих до серверних функцій і процедур.
Наприклад, код написано таким чином:
- у клієнтській функції у формі створюється структура, до якої вставляється рядок, написаний розробником конфігурації;
- клієнтська функція передає цю структуру до серверної функції форми;
- серверна функція форми викликає серверну функцію спільного модуля;
- у серверній функції виконується код із рядка, вставленого до структури.
У цьому випадку вимоги п.1.1. дотримано – не виконується код, який інтерактивно вводить користувач, але, тим не менш, є така вразливість:
- зловмисник створює структуру, до якої вставляє рядок зі шкідливим кодом;
- зловмисник викликає клієнтську функцію форми й у такий спосіб виконує шкідливий код на сервері.
Ще небезпечніше, якщо методи, у яких за допомогою Виконати або Обчислити виконується код, отриманий із параметрів, розташовуватимуться в модулях із встановленою ознакою ВикликСервера.
1.3. Для усунення вразливостей, описаних у пунктах 1.1 і 1.2, потрібно в серверних процедурах і функціях виклик методів Виконати або Обчислити попереджати кодом:
Якщо ОбщегоНазначенияПовтИсп.РазделениеВключено() Тоді ТекстИсключения = НСтр("ru = 'Спроба виконання неприпустимих методів у режимі сервісу.'"); ВызватьИсключение ТекстИсключения; КонецЕсли;
2. Виняток можуть становити окремі обґрунтовані випадки, коли безпека користувацьких даних гарантується будь-якими альтернативними способами. До таких винятків мають бути надані необхідні пояснення в тексті коментаря в коді конфігурації.
3. У разі якщо в конфігурації передбачено перенесення даних до сервісу з локальної версії програми, необхідно забезпечити вимкнення всіх користувацьких фрагментів коду або текстів запитів, які були введені в локальній версії.
Під час використання в конфігурації Бібліотеки стандартних підсистем, також є можливість попередньої обробки даних, що завантажуються з локальної версії до сервісу (див. документацію до підсистеми Робота в моделі сервісу).
Див. також
- Хмарні технології (стаття на сайті 1c.ru)
- Безпека прикладного програмного інтерфейсу сервера