CS-Script是否提供开箱即用的沙盒功能?

4

我正在研究cs-script,想了解它的安全性如何。我知道脚本是动态加载和卸载的,但是这个脚本是否可以逃离执行程序集?也就是说,它是否可以使用反射从同一进程中的其他程序集访问和实例化类?

所以我的问题是,cs-script默认是否具有内置安全性,或者它是否不关心安全性?

2个回答

3
如果您指的是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
编辑1:您无法禁用隐式加载,但您可以将脚本放入没有其他程序集的目录中,这将防止隐式加载找到其他程序集。脚本仍将能够调用已加载的命名空间。但这只是“安全性通过混淆”;托管代码的本质意味着一个决心的人总是可以通过反射访问您的代码。

2
简而言之:CS-Script本身不提供任何安全功能。
在这里回答:https://dev59.com/iV7Va4cB1Zd3GeqPNM1h#8692459 引用:
"立即有吸引力的解决方案是使用.NET Sandbox。它恰好为这种情况而设计。在使用CS-Script运行脚本的主机应用程序中,可以使用CLR标准沙箱。想法是在加载可疑脚本之前初始化CAS,其余由CLR负责。如果需要配置目录/文件权限,则使用CAS工具进行配置。这样,脚本是用户提供例程的“运输”方式。CS-Script是实现此类传输的便捷机制,但实际的安全问题由.NET Sendoxing处理,后者具有综合性功能集,可覆盖几乎所有可能的安全方案。通过CS-script下载内容,您可以找到Sendboxing示例(\ Samples \ Sandboxing),其中演示了如何防止脚本执行文件I/O操作(例如创建文件)."

在cs-script中使用.Net安全凭据的示例可在http://www.csscript.net/Samples.html (sandbox.zip)找到。

为了安全地执行不受信任的cs-script(尽可能隔离),在加载脚本之前,创建一个带有安全限制的新AppDomain,然后在主域和脚本域之间进行数据调度。请参阅https://msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接