代码之家  ›  专栏  ›  技术社区  ›  djdd87

CSharpcodeprovider-是否可以交易?

  •  7
  • djdd87  · 技术社区  · 14 年前

    对这个问题的简短表示歉意,不过我认为不需要太多的阐述。

    使用 CSharpCodeProvider 它能打开服务器进行攻击吗?

    3 回复  |  直到 13 年前
        1
  •  5
  •   Tomas Petricek    14 年前

    这取决于你如何使用它。下面是一个摘要,从安全使用到您肯定不想允许的使用(在您想要控制的服务器或某些环境上运行代码时):

    • 如果你使用 CSharpCodeProvider 仅仅为了生成C源代码,那么您只需要一个将生成的文件保存到某个目录或记录的权限(如果可以将生成的代码保存到内存流中的话)

    • 如果您使用它来编译生成的C源代码,那么您需要一个运行权限 csc.exe (在某些有限的环境(如共享主机)中可能不可用)。

    • 如果您只是生成文件并编译它们,那么它可能不会有害(尽管有人可能会滥用您的应用程序生成许多文件并使用某种DoS攻击攻击服务器)。

    • 如果您还加载和执行生成的代码,那么这取决于您如何生成它。如果您假定c/codedom中没有错误,并且可以保证生成的代码是安全的,那么您应该没事。

    • 如果代码包含以下内容 CodeSnippetExpression 这可以由用户提供(以某种方式),用户无法在您的服务器上编写和运行他或她想要的任何内容,因此这可能非常危险。

        2
  •  2
  •   John Feminella    14 年前

    某种程度上。从表面上看,这不是直接的风险,因为你不是 运行 代码,只是 编译 它。但是,没有什么能说明C编译器不包含某种错误,如果有正确的恶意输入,将导致它退出并直接开始执行命令。

    但是,如果您稍后执行已编译的代码(并且可能是这样——否则,为什么要编译它以开始呢?),它将运行与您相同的上下文。显然,这有各种令人不快的安全隐患,就像使用准相似的 eval() 其他语言的特点。

        3
  •  1
  •   Robaticus    14 年前

    这取决于您正在编译的源代码。如果您对源代码有足够的控制,那么这可能是一个可接受的风险。如果您允许信任范围之外的人向编译器提供代码,这可能是一个不可接受的风险。