Julia Web Platform

时间:2016-12-06 08:57:41

标签: api julia access

我们正在创建一个在线平台,并通过嵌入式代码编辑器公开Julia API。用户可以访问API并在我们的Web应用程序上运行一些分析。我有一个与控制对API和对象的访问有关的问题。

API现在包含数据库句柄和向用户公开的其他对象,可用于破解内部系统。

以下是目前的架构:

UserProgram.jl

function doanalysis()
   data = getdata()
   # some analysis on data
end

InternalProgram.jl

const client = MongoClient()
const collection = MongoCollection(client,"dbname","collectionName")

function getdata()
   data = #some function to get data from collection
   return data
end

#after parsing the user program 
doanalysis() 

要运行用户分析,我们将用户程序作为命令行参数传递(使用ArgParse模块)并运行内部程序,如下所示

$ julia InternalProgram.jl --file Userprogram.jl

通过这种架构,用户可以访问"客户端"和"收集"并且可以修改内部数据库。

有没有更好的方法来解决这个问题而不暴露对象?

我希望有人能回答这个问题。

1 个答案:

答案 0 :(得分:1)

您将暴露自己的多种类型的漏洞 - 作为一般规则,执行用户输入的代码是一个非常糟糕的想法。

1 / /就像你说的那样,你可能会允许用户对你的数据库执行随机代码。

2 /您的用户将可以访问Julia的所有功能,以便在您的服务器上执行操作(下载他们以后可以执行的文件,例如,访问服务器上的其他服务器和服务[MySQL,电子邮件等])。根据Julia流程的访问级别,考虑未经授权访问您的文件系统,安装密钥记录器,运行垃圾邮件服务器等。

3 /将能够使用Julia软件包并让您遇到很多麻烦 - 例如添加/使用Requests.jl软件包并在其他服务器上执行DoS攻击。

如果你真的想这样,我建议:

为配置为在应用程序中使用的MongoDB用户设置适当的(最小)权限(例如:http://blog.mlab.com/2016/07/mongodb-tips-tricks-collection-level-access-control/

将每个用户的代码执行到一个单独的沙箱/容器中,只显示最低限度的必要软件

让您的容器在托管平台上运行,其中存在工具(防火墙)以监控传入和传出流量(例如阻止垃圾邮件或DoS攻击)

为了实现B /和C /我的建议是使用JuliaBox。我自己还没有使用它,但似乎正是你所需要的:https://github.com/JuliaCloud/JuliaBox

运行后,您还可以使用https://github.com/JuliaWeb/JuliaWebAPI.jl