или, как не разрушить чужой замок из песка.
Поскольку нам нужно иметь возможность загружать код с серверов, но мы не хотим, чтобы это позволяло серверам устанавливать вредоносное ПО на компьютеры людей, SS14 применяет методы песочницы (sandboxing), чтобы контент не мог, ну… устанавливать вредоносное ПО.
Текущая реализация
Песочница в настоящее время реализована с помощью анализа сборок контента до их загрузки. Сборки сначала проверяются на верифицируемость IL, чтобы убедиться, что они не делают никаких забавных трюков с указателями. Затем все ссылающиеся члены (методы и поля) сборки проверяются по белому списку. Все API, которые потенциально могут быть использованы для обхода песочницы, конечно, запрещены.
«Помогите, я получил нарушение песочницы»
Я перечислю несколько советов по исправлению нарушений песочницы, если они возникнут.
Ссылка на System.Activator из ниоткуда
Внутренне C# использует Activator.CreateInstance(), если вы инстанцируете обобщённый параметр следующим образом:
public static T Foo<T>() where T : new()
{
return new T();
}
На самом деле это компилируется в:
public static T Foo<T>() where T : new()
{
return (T)Activator.CreateInstance(typeof(T));
}
Как видите, теперь есть ссылка на System.Activator. Мы не можем разрешить прямое использование этого класса, так как его можно очень легко использовать для обхода песочницы, например, через конструкторы StreamReader.
Чтобы исправить это, используйте IDynamicTypeFactory.CreateInstance или ISandboxHelper.CreateInstance. Они проверяют, что создаваемый тип определён в контенте и, следовательно, разрешён.
Неверифицируемая инструкция
stackalloc в C# является неверифицируемым IL во всех случаях (да, даже при выделении в Span<T>, что не является небезопасным), так как используемая инструкция localloc всегда неверифицируема. Здесь мало что можно сделать, кроме как «не используйте stackalloc».
Всё остальное
Конечно, количество API, не внесённых в белый список, слишком велико, чтобы перечислять, поэтому для всего остального я отсылаю к «спросите в Discord, если не можете найти альтернативу самостоятельно». Последнее изменение 21 июня 2026 г.