问题描述
想象一下,您对一大群 500 名学生(或 C、Java 或其他语言,可能是任何语言)进行了 Python 考试。 您想检查学生提交的每个代码的结果。
当然,您将没有时间手动阅读所有文件,并且您无法执行文件,因为您无法信任您的学生! 很可能至少有一个学生编写了一个非常邪恶的程序,该程序会读取您的整个主文件夹,通过网络将其发送到他的私人服务器来窃取它,然后删除您的笔记本电脑并将其烧成灰烬。
我想知道在处理这种情况时什么是安全的,什么是不安全的。
-
我假设(并且我真的希望)在基本文本编辑器(例如 GNU Nano 或 Gedit)中打开这样一个邪恶的程序
evil.py
没有风险。任何基本的命令行程序(如file evil.py
等)都一样。 -
我希望 在“智能”编辑器中打开它没有风险,该编辑器执行聪明的“类似智能感知”的代码探索(我正在考虑 VSCode,但 Emacs 和 Vim和许多其他 IDE 做同样的事情)...但也许我错了...有人可以确认或解释吗?
-
但是如何使用命令行 linter,例如用于 Python 的
pylint
,或用于其他语言的 mega-linter 之类的工具......所以这是我的问题:是否有任何风险在一个非常邪恶的输入文件上执行这样的 linter?
对于思想实验,我必须假设邪恶的黑客学生确切地知道我将使用什么 linter 来评估她/他的代码,并且可以设计 evil.py
代码来攻击这个 linter!
如果答案不是特定于读取/linting Python(并且可能安全地从本地沙箱执行代码),而是特定于 Java、C 或 OCaml 等编译语言,我也会非常高兴。
解决方法
-
如果您不确定,请使用 linux 并将所有文件设置为不可执行 :)
-
vscode 并不出色......我可以想象的“黑客”是打开一个带有推荐扩展名的项目(在 .vscode 文件夹中),并且该 vscode 扩展名将包含任何可以使您的计算机成为比特币的内容矿工? 不过除了应该没问题
-
Mega-Linter 在 docker 镜像中运行,它只是读取文件,而不是运行它们,所以我认为它非常安全 :)
奖励:在所有项目的父文件夹上仅使用复制粘贴检测器运行 Mega-Linter 以检查谁将内容复制给了谁会不会很有趣? ?