V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
laravel
V2EX  ›  程序员

要运行用户提供的 go、 Python 代码,该怎么做?

  •  
  •   laravel · 2020-12-13 13:43:09 +08:00 · 3927 次点击
    这是一个创建于 1447 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用什么比较实现起来简单,安全。

    26 条回复    2020-12-23 19:24:41 +08:00
    learningman
        1
    learningman  
       2020-12-13 13:46:01 +08:00
    docker
    xiaket
        2
    xiaket  
       2020-12-13 13:59:21 +08:00
    AWS lambda
    liuxey
        3
    liuxey  
       2020-12-13 14:15:09 +08:00
    无头无尾,无答案
    laravel
        4
    laravel  
    OP
       2020-12-13 14:17:42 +08:00
    @learningman 自己实现呢?
    @xiaket
    toomlo
        5
    toomlo  
       2020-12-13 14:21:27 +08:00
    @laravel #4 自己实现个 docker 也可以啊
    xiaket
        6
    xiaket  
       2020-12-13 14:22:20 +08:00   ❤️ 1
    @laravel 自己实现的话, 里面的细节多得吓人, 而且几十几百个细节有一个做不好就是送人 RCE, 你确定? 反正我是没胆量自己去做.
    laravel
        7
    laravel  
    OP
       2020-12-13 14:34:45 +08:00
    @liuxey 就是用户提交的代码,要执行,给用户返回结果
    neoblackcap
        8
    neoblackcap  
       2020-12-13 14:36:15 +08:00
    最安全快捷的就是按需开虚拟机。
    BiteTheDust
        9
    BiteTheDust  
       2020-12-13 14:36:26 +08:00
    可以研究一下各种 online judge 的做法
    Greatshu
        10
    Greatshu  
       2020-12-13 14:38:01 +08:00
    评测机?有现成的
    zxCoder
        11
    zxCoder  
       2020-12-13 15:14:36 +08:00   ❤️ 2
    据说是个大坑,强迫症不建议搞这个,或者找现成的评测机,(因为做不对绝对的安全,然后强迫症就会很烦,就是我了
    loading
        12
    loading  
       2020-12-13 15:21:26 +08:00 via Android
    这做得好能成立一家公司了,大坑。
    joesonw
        13
    joesonw  
       2020-12-13 15:31:59 +08:00
    docker 的话至少得上 AppArmor
    性能不重要的话有 google 的 gvisor, 把 syscall shim 掉了, 绝对安全.
    最好用虚拟机
    或者 firecracker, kata 之类新轻量虚拟机也行
    xyjincan
        14
    xyjincan  
       2020-12-13 15:42:50 +08:00 via Android
    定期还原
    renmu123
        15
    renmu123  
       2020-12-13 16:14:19 +08:00 via Android
    自己实现分分钟被黑掉
    helsonxiao
        16
    helsonxiao  
       2020-12-13 16:15:26 +08:00 via Android
    可以参考一下青岛大学开源的 OJ 项目
    laravel
        17
    laravel  
    OP
       2020-12-13 16:24:15 +08:00
    这么复杂吗?我以为就是用 docker 那个原理,做下隔离、限制资源使用就行了
    FS1P7dJz
        18
    FS1P7dJz  
       2020-12-13 16:32:32 +08:00
    虚拟机啊...
    vmware 本身就有现成的技术从模板创建新的虚拟机
    根据性能几分钟左右就可以创建出一个完全隔离且全新的环境
    sirgod
        19
    sirgod  
       2020-12-13 16:40:00 +08:00
    go 的话可以用 playground https://github.com/golang/playground
    cmdOptionKana
        20
    cmdOptionKana  
       2020-12-13 17:14:11 +08:00 via Android
    go 好像问题不大,官方给出了 play.golang.org 的源码
    pythonee
        21
    pythonee  
       2020-12-13 17:35:06 +08:00
    有意思的话题,MARK
    lrh3321
        22
    lrh3321  
       2020-12-13 18:20:49 +08:00 via Android
    虚拟机里跑
    learningman
        23
    learningman  
       2020-12-13 21:01:02 +08:00
    @laravel 有那种本事的人不会问这种问题
    KnownRock
        24
    KnownRock  
       2020-12-14 09:04:02 +08:00 via Android
    Openfaas
    xuboying
        25
    xuboying  
       2020-12-14 12:46:07 +08:00
    op 是要做服务去执行未知的用户的未知的 UGC 代码,还是和固定的用户有合作关系是集成开发?
    laravel
        26
    laravel  
    OP
       2020-12-23 19:24:41 +08:00
    @xuboying 未知用户
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2825 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:34 · PVG 10:34 · LAX 18:34 · JFK 21:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.