爱意满满的作品展示区。
virusdefender

我们学校的 Online Judge 开源了,基于 Python 和 Docker, https://github.com/QingdaoU/OnlineJudge ,求 star

  •  1
     
  •   virusdefender ·
    virusdefender · Sep 17, 2015 · 21526 views
    This topic created in 3894 days ago, the information mentioned may be changed or developed.

    每个学校 ACM 队在训练或者招生的时候可能都需要一个 oj ,我们常用的 oj 是杭电的,但是有些不是很满意的地方。

    首先是界面,国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑, 10 多年前的风格,可能因为 oj 就是 10 年前写的吧。

    用起来也有些不是很方便的地方,比如提交题目要新开页面,要再选择题号,再手动刷新看结果。自己内部比赛有些规则也没办法去设置,自己没法去添加题目去查看测试用例等等。

    所以我们实验室三个人用了大约暑假一个半月的时间,自己写了一个 oj ,我们的定位不仅仅是 ACM 训练,还有学校平时教学的作业考试等也可以在上面进行。 老师作为普通管理员可以创建小组,相当于一个班级,内部举办比赛,创建修改题目,外人不可见,超级管理员才可以管理公开的题目和比赛。

    后端涉及到的技术有 Python 、 Django 、 Docker 、 MySQL 、 Redis 、 Celery 等,后台的前端是一个 SPA 页面,使用 avalon js 。

    GitHub: https://github.com/QingdaoU/OnlineJudge (顺手 star 一个吧~)

    文档: https://www.zybuluo.com/virusdefender/note/171932

    demo: https://qduoj.com

    给大家提前注册了账号,用户名 V2EX (都是小写的,论坛会自动转换为大写),密码 123456 ,欢迎去试用一下。

    有什么问题或者建议欢迎在下面回复。

    谢谢啦~

    Supplement 1  ·  Sep 17, 2015
    判题临时关了,楼主正在抓紧写 todo 掉的安全机制,么么哒~
    Supplement 2  ·  Sep 17, 2015
    已经增加了部分系统调用的过滤
    Supplement 3  ·  Apr 2, 2016
    56 replies    2020-02-08 01:16:32 +08:00
    hcymk2
        1
    hcymk2  
       Sep 17, 2015
    我怎么 star 过?
    Nan7Huang
        2
    Nan7Huang  
       Sep 17, 2015
    哦~厉害~我要推荐给队友
    maemual
        3
    maemual  
       Sep 17, 2015
    不好意思。。。似乎被我一个 fork 炸弹就玩挂了。。。
    elvodn
        4
    elvodn  
       Sep 17, 2015
    @maemual 真会玩
    maemual
        5
    maemual  
       Sep 17, 2015
    @elvodn 作为同样写过 OJ 的人,看到用 Docker 判题就知道八成没处理这种问题。。。
    virusdefender
        6
    virusdefender  
    OP
       Sep 17, 2015
    @maemual 额 我看到了 现在系统调用过滤还是 todo 的状态。。
    virusdefender
        7
    virusdefender  
    OP
       Sep 17, 2015
    @maemual docker 里面跑的 https://github.com/quark-zju/lrun docker 只是用来方便隔离环境用的,只是 lrun 的系统调用过滤我还没写
    wph95
        8
    wph95  
       Sep 17, 2015
    > 国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑
    赞的不能再多

    整体写的非常好

    部分代码有待商榷 比如:
    contest_submission 和 submission 可以和到一起的


    评测机代码问题很严重 , 这个等下私聊告诉你 , 已经看出起码 3 种方式搞坏 。
    个人还是推荐 不开源 评测机 , 或者集成 hustoj 的评测机(虽然渣的厉害 , 但是安全) 或者给等即将开放的 CodeVS 的评测 API :)
    maemual
        9
    maemual  
       Sep 17, 2015
    还有, Django 的 settings 里的 SECRET_KEY ,开源出来会有安全隐患的。
    wph95
        10
    wph95  
       Sep 17, 2015
    @virusdefender 不能隔 fork 的 隔了 fork () , 会让 java 性能锐减 , lrun 我记得有个参数的 开启那个参数就可以防止 fork 炸弹,
    没记错应该是 --isolate-process
    virusdefender
        11
    virusdefender  
    OP
       Sep 17, 2015
    @maemual 这个只有在 signed cookie 里面用到吧,如果用了 signed cookie 会有问题的。
    virusdefender
        12
    virusdefender  
    OP
       Sep 17, 2015
    @wph95 嗯~代码中就可以看到 lrun 的那些参数都是 todo 的状态~docker 隔离性也有问题
    maemual
        13
    maemual  
       Sep 17, 2015
    @wph95 可以交流一下评测机的安全机制么。
    learnshare
        14
    learnshare  
       Sep 17, 2015
    为什么感觉山东的 ACM 搞得比较热闹
    wph95
        15
    wph95  
       Sep 17, 2015
    @maemual
    CodeVS 的核心技术都在评测机了 233
    安全部分 还是传统做法 不过没用 ptrace ( ptrace 太傻 x )
    我原来也是用 lrun (Orz quake ) , 不过和 docker 无法兼容 就放弃了 , 自己写了一套 , 正努力的和整个 docker 生态融合 。

    还有就是 动态弹性的评测集群 , 这个有很多花式解决方案 。

    ---

    有兴趣可以多多交流 , 也可以使用 codevs 的 开放 api 。 已经接受近 300 万次代码提交的检验 , 2 台单核 1g 机器就能承受年百万次评测哦 :—) 。 即将开放 平时 2 路, 峰值 10 路评测 的集群给大家用:)
    maemual
        16
    maemual  
       Sep 17, 2015
    @wph95 API 文档在哪?
    breeswish
        17
    breeswish  
       Sep 17, 2015
    安利一个久经考验(经过多位就职于国内著名安全实验室小伙伴测试)的,基于 Windows Sandbox 的评测机( from Vijos )

    https://github.com/iceboy-sjtu/winjudge
    iniwap
        18
    iniwap  
       Sep 17, 2015
    @wph95 OJ 是 Online Judge 系统的简称,用来在线检测程序源代码的正确性。著名的 OJ 有 TYVJ 、 RQNOJ 、 URAL 等。国内著名的题库有北京大学题库、浙江大学题库、电子科技大学题库、杭州电子科技大学等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。
    Delbert
        19
    Delbert  
       Sep 17, 2015 via Android
    @learnshare 山大 7 年表示不知道 acm 是啥
    wph95
        20
    wph95  
       Sep 17, 2015
    @maemual 还在实现中 可以 mail [email protected] 交流
    ChiangDi
        21
    ChiangDi  
       Sep 17, 2015
    哎哟不错哦,支持
    virusdefender
        22
    virusdefender  
    OP
       Sep 18, 2015 via Android
    @learnshare 可能是高考遗留问题。。但是成绩不好
    tuteng
        23
    tuteng  
       Sep 18, 2015
    好炫呢
    Changxu
        24
    Changxu  
       Oct 10, 2015
    docker 最近新加入了一个特性,是--kernel-memory 参数,据说可以用来解决 fork 炸弹问题: https://github.com/docker/docker/issues/6479

    另外,常见的攻击 OJ 的手段都有什么?
    virusdefender
        25
    virusdefender  
    OP
       Oct 11, 2015
    @Changxu 调用各种命令 删除修改文件 fork 占用大量内存 include </dev/random>等
    virusdefender
        26
    virusdefender  
    OP
       Oct 11, 2015
    @Changxu 我在系统调用上限制了一下,直接 fork 应该不行了,其余的我也不会写。。
    nisekoi
        27
    nisekoi  
       Oct 13, 2015
    已 star..不过按照文档配置了一下,返回 Server Error (500),不清楚是什么问题
    virusdefender
        28
    virusdefender  
    OP
       Oct 13, 2015
    @nisekoi 看日志
    nisekoi
        29
    nisekoi  
       Oct 13, 2015
    @virusdefender 已解决。说说我遇到的问题:
    提示 TemplateDoesNotExist: oj/index.html
    将 /qduoj/template/src 中的 src 改为 release

    可以访问后静态文件没显示出来?
    由于我把静态文件放在了 /root/下,换到其他目录即可
    virusdefender
        30
    virusdefender  
    OP
       Oct 13, 2015
    @nisekoi 你是不是没设置环境变量啊,会判断环境变量来决定配置文件的,一个是 src 一个是 release 。

    要不你就是没打包 js , python tools/release_static.py 就行,这个时候会生成 release 目录。

    不打包的话文件很大,有的页面 1M 多。
    nisekoi
        31
    nisekoi  
       Oct 13, 2015
    @virusdefender oj_env 么,那应该是没有设置环境变量了
    junnplus
        32
    junnplus  
       Oct 17, 2015
    我们学校也在开发新的 OJ ,测试地址 http://oj.sdutacm.org 目前功能还没写完
    virusdefender
        33
    virusdefender  
    OP
       Oct 17, 2015
    @junnplus looks great~
    junnplus
        34
    junnplus  
       Oct 17, 2015
    virusdefender
        35
    virusdefender  
    OP
       Oct 17, 2015
    @junnplus http://oj.sdutacm.org/u/1/ 我们也在写这样一个个人主页,仿 github
    virusdefender
        36
    virusdefender  
    OP
       Oct 17, 2015
    @junnplus 看了下你们的后台,也是 django 的?
    junnplus
        37
    junnplus  
       Oct 17, 2015
    @virusdefender 后端是 flask
    junnplus
        38
    junnplus  
       Oct 17, 2015
    @virusdefender 方便的可以交流下,微信 jun_nplus
    kzzhr
        39
    kzzhr  
       Oct 18, 2015 via iPhone
    作为一个折腾过 oj 的人。挺支持这样做的。
    不过有一些个人看法,浙大在很多年前开源了一个判题的 core ,我觉得其实够用了。并没有必要去用 docker 从头搞。但是其他地方,我们称之为用户体验吧,确实应该改一改。功能上很多不足,应该才是需要花很多精力的
    snnn
        40
    snnn  
       Oct 18, 2015 via Android
    直接刷 UVA 什么的不好吗?
    virusdefender
        41
    virusdefender  
    OP
       Oct 18, 2015 via Android
    @kzzhr 你是说 lrun 么,我们用到了那个, docker 只是一个壳
    virusdefender
        42
    virusdefender  
    OP
       Oct 18, 2015 via Android
    @snnn 自己考试测评比较方便
    Omitted
        43
    Omitted  
       Oct 18, 2015
    信工大二,对 python 感兴趣,请问加入学习嘛 0.0
    virusdefender
        44
    virusdefender  
    OP
       Oct 18, 2015
    @Omitted 青大的?
    Omitted
        45
    Omitted  
       Oct 18, 2015
    @virusdefender 是的, 14 级软外
    Omitted
        46
    Omitted  
       Oct 18, 2015
    @virusdefender 对 Python 和 Docker 都感兴趣,不过仅仅算是知道吧,想深入学习,但没有方向,学长能否带走😶
    virusdefender
        47
    virusdefender  
    OP
       Oct 18, 2015
    jzp113
        48
    jzp113  
       Dec 14, 2015
    哈哈 用 python 写的也支持下 python 在线编译吧
    virusdefender
        49
    virusdefender  
    OP
       Dec 14, 2015
    @jzp113 acm 没用 Python 的,所以就没加
    samhjn
        50
    samhjn  
       Jan 5, 2016
    @wph95 其实很多年以前 CodeVS ( WikiOI )的评测机也是不安全的。当年他们的安全控制还是字符串匹配。最后我用了伪汇编调用 fork 把服务器整个搞瘫了。
    wph95
        51
    wph95  
       Jan 5, 2016
    @samhjn
    当年我还在高中 没有接手 用了某傻 x 开源 judge 方案
    改名 codevs 后就换新的 judge 了 欢迎测试
    felix021
        52
    felix021  
       Jan 31, 2016
    写 OJ 的人真多……我想找个能跑 PHP 的,我之前写的那个 Judge 完全是基于 ptrace 限制系统调用,这个对付 PHP 的话很不灵活。
    virusdefender
        53
    virusdefender  
    OP
       Jan 31, 2016
    @felix021 PHP Python 之类的语言真没经验,因为很难确定那是解释器的行为还是代码的行为...

    而 Java 还自带一个安全策略呢
    felix021
        54
    felix021  
       Feb 1, 2016
    @virusdefender 我是从最小权限开始,一点一点尝试,一点一点放开,直到把必须权限都放开为止。
    xiaoqiang179
        55
    xiaoqiang179  
       May 5, 2018
    支持学长!!!
    bulabean
        56
    bulabean  
       Feb 8, 2020
    支持,厉害了。
    oj.youdao.com 好像,简直一毛一样。我觉得他们用的你这个开源
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2815 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 408ms · UTC 10:31 · PVG 18:31 · LAX 03:31 · JFK 06:31
    ♥ Do have faith in what you're doing.