c# – CS-Script是否提供开箱即用的沙盒?

我正在研究cs-script,我想知道它是多么安全,开箱即用.我知道脚本是动态加载和卸载的,但该脚本是否可以逃脱其执行的程序集?即它可以使用反射来访问和实例化同一进程中其他程序集的类吗?

所以我的问题是cs-script默认带有内置安全性还是没有麻烦?

最佳答案 如果你的意思是按照
http://www.csscript.net/的CS-Script,那么它可以引用并调用其他程序集,使用正常的语法:

using MyOtherAssembly;

CS-Script使用隐式加载来尝试根据using语句中的命名空间计算要加载的程序集.这不能保证在所有情况下都能工作,在这种情况下,您需要使用显式加载,例如,您可以为CS-Script指定显式加载所需的程序集:

//css_ref "..\MyOtherAssembly.dll"
using MyOtherAssembly;

// css_ref是一个特殊注释,由CS-Script作为加载程序集的指令处理,在这种情况下,引用的程序集位于脚本的父目录中.这与普通程序集的项目文件中的程序集引用类似.您还可以使用CS-Script命令行显式加载程序集.

我还发现,如果在调用脚本之前已将引用的程序集加载到AppDomain中,则不需要使用隐式或显式加载.我假设CS-Script检测到命名空间已存在于AppDomain中,因此不会为隐式加载而烦恼.

有关装配装载的更多信息,请参见:http://www.csscript.net/help/using_.net_assemblies.html.

Edit1:您无法禁用隐式加载,但您可以将脚本放入一个没有任何其他程序集的目录中,这将阻止隐式加载能够找到任何其他程序集.该脚本仍然可以调用已加载的命名空间.但这只是“默默无闻的安全”;托管代码的本质意味着确定的人总是可以通过反射访问您的代码.

点赞