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

 

Для того чтобы отключить ограничения, необходимо в меню Параметры (Options) дизайнера отчетов установить опцию Безопасность скриптов (Script Security) в значение Полный доступ (Full Access). Если же опция Безопасность скриптов установлена в значение Безопасный режим (Safe Mode), то при выполнении скриптов применяются следующие ограничения.

 

 

Проверка типов

Перед использованием типов в скрипте выполняется их проверка по спискам разрешенных и запрещенных типов.

Особенности проверки:

•Проверяются как полные имена типов, так и их короткие имена.
•Пространства имен проверяются по префиксу. Если пространство имен начинается с запрещенного значения, тип считается недоступным.
•Для массивов и обобщенных типов (Generics) проверка выполняется рекурсивно. Если хотя бы один вложенный тип запрещен, использование всего типа блокируется.

 

 

Ограничения на использование ресурсов

Для защиты от чрезмерного потребления памяти и процессорного времени применяются следующие ограничения:

•Максимальный размер массива - 10 000 элементов;
•Максимальная глубина рекурсии - 50 вызовов;
•Максимальное количество шагов выполнения или итераций цикла - 100 000;
•Максимальная глубина вложенности generic-типов - 10 уровней.

 

При превышении любого из указанных ограничений выполнение скрипта будет остановлено.

 

 

Запрещенные типы

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

К числу запрещенных типов относятся:

•System.Activator
•System.AppDomain
•System.Environment
•System.Diagnostics.Process
•System.Diagnostics.ProcessStartInfo
•System.Threading.Thread
•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.WebClient
•System.Net.Sockets.Socket
•System.Net.Sockets.TcpClient
•Stimulsoft.Base.StiCSharpScriptParser

 

Запрещенные пространства имен

По умолчанию запрещено использование следующих пространств имен:

•System.IO
•System.Diagnostics
•System.Net
•System.Net.Sockets
•System.Reflection
•System.Runtime.InteropServices
•System.Security.Cryptography
•System.CodeDom
•System.Web
•Microsoft.CSharp
•Microsoft.VisualBasic
•Microsoft.Win32

 

Все типы, принадлежащие указанным пространствам имен, считаются недоступными для использования в скриптах.