如何在 asp.net Web 应用程序中安全地嵌入 F# 编译器

Posted

技术标签:

【中文标题】如何在 asp.net Web 应用程序中安全地嵌入 F# 编译器【英文标题】:How to securely embed the F# compiler in a asp.net web app 【发布时间】:2016-04-25 09:42:27 【问题描述】:

我正在开发一个 asp.net Web 应用程序,使用户能够提交 F# 代码,这些代码应该在服务器上动态编译和执行。我正在考虑使用此处显示的方法在 Web 应用程序中托管 F# 编译器: https://fsharp.github.io/FSharp.Compiler.Service/compiler.html 或者使用 F# 交互:http://fsharp.github.io/FSharp.Compiler.Service/interactive.html

这个想法是动态编译 F# 代码,然后将其作为程序集加载到 c# 中,或者让 F# 交互式解释代码。但是,我主要关心的是安全性以及如何阻止最终用户执行任意代码。有没有简单的方法来限制这个?谢谢!

【问题讨论】:

对于小型 sn-ps,也许可以查看@FsiBot Twitter bot (github.com/mathias-brandewinder/fsibot) 的实现。 此外,关于使用 C# 执行此操作的讨论很多。不同的编译器,但很多问题(比如安全性)是一样的 嗯,最重要的问题是安全性。是什么阻止了用户使用脚本擦除整个磁盘? 一种解决方案是使用编译器服务动态编译 F# 代码,然后将生成的程序集加载到沙盒应用程序域中,如下所述:msdn.microsoft.com/en-us/library/bb763046(v=vs.110).aspx 另见***.com/questions/1094478/… 【参考方案1】:

这是一个老问题,自从提出这个问题以来,情况发生了很大变化。现在 Fable 团队已经设法在 web-worker 中运行 F# 编译器,从而无需在服务器端执行代码。这回避了与执行不受信任的代码有关的所有安全问题。

您可以试用 REPL here。 您可以查看源代码here。

【讨论】:

以上是关于如何在 asp.net Web 应用程序中安全地嵌入 F# 编译器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Web API 中使用非线程安全的 async/await API 和模式?

ASP.NET Web 窗体中的输出编码安全问题

匿名端点重定向到安全 ASP.Net Core Web 应用程序中的登录屏幕

ASP.NET Web API的安全管道

使用本地帐户使用安全的 ASP Net 5 web api

ASP.NET MVC Web API 身份验证令牌安全问题