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

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

  •  1
     
  •   virusdefender ·
    virusdefender · Sep 17, 2015 · 21999 views
    This topic created in 4064 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
    hcymk2
    Sep 17, 2015
    1
    我怎么 star 过?
    Nan7Huang
    Nan7Huang
    Sep 17, 2015
    2
    哦~厉害~我要推荐给队友
    maemual
    maemual
    Sep 17, 2015
    3
    不好意思。。。似乎被我一个 fork 炸弹就玩挂了。。。
    elvodn
    elvodn
    Sep 17, 2015
    4
    @maemual 真会玩
    maemual
    maemual
    Sep 17, 2015
    5
    @elvodn 作为同样写过 OJ 的人,看到用 Docker 判题就知道八成没处理这种问题。。。
    virusdefender
    virusdefender
    OP
    Sep 17, 2015
    6
    @maemual 额 我看到了 现在系统调用过滤还是 todo 的状态。。
    virusdefender
    virusdefender
    OP
    Sep 17, 2015
    7
    @maemual docker 里面跑的 https://github.com/quark-zju/lrun docker 只是用来方便隔离环境用的,只是 lrun 的系统调用过滤我还没写
    wph95
    wph95
    Sep 17, 2015
    8
    > 国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑
    赞的不能再多

    整体写的非常好

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


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

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

    ---

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

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

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

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

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

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

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