我正在研究cs-script,我想知道它是多么安全,开箱即用。我知道脚本是动态加载和卸载的,但该脚本是否可以逃脱其执行的程序集?即它可以使用反射来访问和实例化同一进程中其他程序集的类吗?
所以我的问题是cs-script默认是内置安全性还是不打扰?
答案 0 :(得分:2)
如果您的意思是按照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:您无法禁用隐式加载,但您可以将脚本放入一个没有任何其他程序集的目录中,这样可以防止隐式加载能够找到任何其他程序集。该脚本仍然可以调用已加载的命名空间。但这只是"默默无闻的安全&#34 ;;托管代码的本质意味着确定的人总是可以通过反射访问您的代码。
答案 1 :(得分:0)
简而言之:不,CS脚本不提供开箱即用的任何安全功能。
在这里回答:https://stackoverflow.com/a/8692459/1657476
直接有吸引力的解决方案是使用.NET Sandbox。它是 专为此类场景设计.CLR标准 沙箱可用于运行脚本的主机应用程序 CS-Script等。这个想法是你在加载之前初始化CAS 可疑脚本,其余是CLR的责任。如果你 需要配置使用CAS执行的目录/文件权限 工具。这种方式脚本是例程的“运输” 由您的用户提供。而CS-Script是一种方便的机制 实施此类运输但实际的安全问题是 由.NET Sendoxing解决,它具有全面的一套 实际涵盖所有可能的安全方案的功能。 使用CS脚本下载,您可以找到Sendboxing示例 (\ Samples \ Sandboxing)演示如何防止脚本 文件I / O操作(例如,创建文件)。
使用带有cs脚本的.Net安全凭证的示例位于:http://www.csscript.net/Samples.html(sandbox.zip)
要安全地执行不受信任的cs脚本(尽可能隔离),请在加载脚本(进入新的应用程序域)之前创建一个具有安全限制的新AppDomain
。然后可以在主域和脚本域之间封送数据。
见https://msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx