【问题标题】:Does CS-Script provide sandboxing out of box?CS-Script 是否提供开箱即用的沙盒功能?
【发布时间】:2016-02-10 17:05:37
【问题描述】:

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

所以我的问题是 cs-script 是否默认带有内置的安全性,还是不打扰?

【问题讨论】:

    标签: c# security cs-script


    【解决方案1】:

    如果您指的是 http://www.csscript.net/ 中的 CS-Script,那么是的,它可以使用正常语法引用和调用其他程序集:

    using MyOtherAssembly;
    

    CS-Script 使用 implicit 加载来尝试根据 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:您不能禁用隐式加载,但您可以将脚本放入没有任何其他程序集的目录中,这将阻止隐式加载能够找到任何其他程序集。该脚本仍将能够调用已加载的命名空间。但这只是“默默无闻的安全”;托管代码的本质意味着坚定的人始终可以通过反射访问您的代码。

    【讨论】:

      【解决方案2】:

      简而言之:不,CS-script 不提供任何开箱即用的安全功能。

      在这里回答:https://stackoverflow.com/a/8692459/1657476

      立即有吸引力的解决方案是使用 .NET Sandbox。它是 专为此类场景而设计。CLR 标准 沙盒可用于运行脚本的主机应用程序 CS 脚本。这个想法是在加载之前初始化 CAS 可疑脚本,其余部分由 CLR 负责。如果你 需要配置目录/文件权限,您可以使用 CAS 工具。这种方式脚本是例程的“传输” 由您的用户提供。 CS-Script 是一种方便的机制 实施这种运输,但实际的安全问题是 由 .NET Sendoxing 解决,它具有全面的一套 涵盖几乎所有可能的安全场景的功能。 使用 CS 脚本可下载文件,您可以找到 Sendboxing 示例 (\Samples\Sandboxing) 演示如何防止脚本 文件 I/O 操作(例如创建文件)。

      通过 cs-script 使用 .Net 安全凭证的示例可在以下位置获得:http://www.csscript.net/Samples.html (sandbox.zip)

      要安全地执行不受信任的 cs 脚本(尽可能隔离),请在加载脚本(到新的应用程序域)之前创建一个具有安全限制的新 AppDomain。然后可以在主域和脚本域之间编组数据。 见https://msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 1970-01-01
        • 2016-05-20
        相关资源
        最近更新 更多