По умолчанию скрипты выполняются в безопасном режиме с некоторыми ограничениями. Безопасный режим рекомендуется использовать при выполнении пользовательских скриптов или скриптов из недоверенных источников. Это позволяет ограничить доступ к файловой системе, сети, системным процессам и другим потенциально опасным возможностям платформы.
Для того чтобы отключить ограничения, необходимо в меню Параметры (Options) дизайнера отчетов установить опцию Безопасность скриптов (Script Security) в значение Полный доступ (Full Access). Если же опция Безопасность скриптов установлена в значение Безопасный режим (Safe Mode), то при выполнении скриптов применяются следующие ограничения.
Проверка типов
Перед использованием типов в скрипте выполняется их проверка по спискам разрешенных и запрещенных типов.
Особенности проверки:
| Проверяются как полные имена типов, так и их короткие имена. |
| Пространства имен проверяются по префиксу. Если пространство имен начинается с запрещенного значения, тип считается недоступным. |
| Для массивов и обобщенных типов (Generics) проверка выполняется рекурсивно. Если хотя бы один вложенный тип запрещен, использование всего типа блокируется. |
Ограничения на использование ресурсов
Для защиты от чрезмерного потребления памяти и процессорного времени применяются следующие ограничения:
| Максимальный размер массива - 10 000 элементов; |
| Максимальная глубина рекурсии - 50 вызовов; |
| Максимальное количество шагов выполнения или итераций цикла - 100 000; |
| Максимальная глубина вложенности generic-типов - 10 уровней. |
При превышении любого из указанных ограничений выполнение скрипта будет остановлено.
Запрещенные типы
В безопасном режиме недоступны типы, которые позволяют выполнять системные операции, работать с процессами, сетью, потоками, сериализацией или динамической загрузкой кода.
К числу запрещенных типов относятся:
| System.Diagnostics.Process |
| System.Diagnostics.ProcessStartInfo |
| System.Threading.Tasks.Task |
| System.Runtime.InteropServices.Marshal |
| System.Runtime.Serialization.Formatters.Binary.BinaryFormatter |
| System.Xml.Serialization.XmlSerializer |
| System.Data.SqlClient.SqlConnection |
| System.Data.OleDb.OleDbConnection |
| System.Net.Http.HttpClient |
| System.Net.Sockets.Socket |
| System.Net.Sockets.TcpClient |
| Stimulsoft.Base.StiCSharpScriptParser |
Запрещенные пространства имен
По умолчанию запрещено использование следующих пространств имен:
| System.Runtime.InteropServices |
| System.Security.Cryptography |
Все типы, принадлежащие указанным пространствам имен, считаются недоступными для использования в скриптах.