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

 

Для того чтобы отключить ограничения, необходимо в меню Параметры (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

 

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