我有一个在我的大学局域网的门户,人们可以上传代码到C / C ++的编程难题。 我想使门户安全,以便人们不能通过他们提交的代码进行系统调用。 可能有几个解决方法,但我想知道如果我可以简单地通过设置一些聪明的gcc标志来做到这一点。 libc在默认情况下似乎包含<unistd.h> ,这似乎是声明系统调用的基本文件。 有没有一种方法可以告诉gcc / g ++在编译时忽略这个文件,这样在unistd.h中声明的任何函数都不能被访问?
你最喜欢的g ++选项是什么?
在哪里得到iostream.h
了解dynamic链接如何在UNIX上工作
链接对象与g ++时的问题
为什么chroot("/var/jail/empty"); setuid(65534); chroot("/var/jail/empty"); setuid(65534); 是不是够好(假设65534有明显的限制)?
限制对头文件的访问不会妨碍您访问libc函数:如果您链接到libc它们仍然可用 – 您将不会拥有原型(和宏); 但你可以自己复制它们。
而不是链接到libc也不会帮助:系统调用可以直接通过内联汇编程序(甚至涉及跳转到数据)。
总的来说,我认为这不是一个好的方法。 在一个完全自包含的虚拟沙箱中运行上传的代码(通过QEMU或类似的东西,也许)可能是一个更好的方式去。
gcc file.c -Dchown -Dchdir
或者你可以自己设置包括后卫:
gcc file.c -D_UNISTD_H
然而,他们的效果可以很容易地通过智能提交者用#undef来恢复:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。