我正在为孩子、程序员制作交互式学习系统。系统会自动编译并运行孩子们提交的代码(c++)。它将被广泛使用,所以我担心更大的“孩子”会尝试使用诸如system
, signal
, exec
,之fork
类的命令来破坏系统。即使格式化硬盘也不会那么可怕,因为我会有自动备份,但我想限制最常见的有害命令。
是否有一些列表,或者更有经验的程序员可以命名这些有害命令?
我正在为孩子、程序员制作交互式学习系统。系统会自动编译并运行孩子们提交的代码(c++)。它将被广泛使用,所以我担心更大的“孩子”会尝试使用诸如system
, signal
, exec
,之fork
类的命令来破坏系统。即使格式化硬盘也不会那么可怕,因为我会有自动备份,但我想限制最常见的有害命令。
是否有一些列表,或者更有经验的程序员可以命名这些有害命令?
您无法通过检测这些命令来保护您的系统,这是因为在 C++ 中您可以使用直接内存访问(即通过reinterpret_cast
)或自修改代码来调用这些命令或与系统交互。相反,编译后,在没有足够访问权限的单独进程中运行程序来造成伤害。
您的建议可以通过编写等效的汇编代码,动态复制被禁止的功能并执行复制等来轻松颠覆。
考虑在系统调用粒度上使用白名单。考虑一个程序纯粹通过系统调用与外界交互。因此,任何不包含系统调用的代码都可以被“信任”。鉴于此,您可以使用动态或静态迂回技术来检测所有系统调用并将您想要允许的系统调用列入白名单。