c – 在C和Pascal中禁用system()和exec()函数
有没有办法通过使用任何编译器参数或修改头/单元文件来禁用C/C++和Pascal中的system()和exec()函数? (这是一个
Windows)
我已经尝试将-Dsystem = NONEXIST用于gcc和g但#include< cstdio>导致编译错误. 编辑:当然我知道他们可以使用#undef系统绕过防御,所以我试图在stdlib.h中注释掉系统功能行,但这也行不通. EDIT2(评论):这是一个系统,用户向其提交程序,服务器使用不同的输入数据编译和运行它,然后将程序输出与预先计算的标准输出进行比较,以查看程序是否正确.现在一些用户发送类似system的代码(“shutdown -s -t 0”);关闭服务器. 服务器正在运行Windows系统,因此我没有任何chroot环境.此外,服务器应用程序是封闭源代码,因此我无法控制用户提交的程序的执行方式.我能做的是修改编译器命令行参数并修改头文件. 解决方法
好吧,你可以尝试:
#define system DontEvenThinkAboutUsingThisFunction #define exec OrThisOneYouClown 在头文件中,但我很确定任何值得他们的盐的代码猴子可以绕过这样的“保护”. 我有兴趣理解为什么你认为这是必要的(如果我们更好地理解问题,可能会有更好的解决方案). 唯一想到的是你想要提供一些类似于Euler项目的在线编译器/运行器.如果是这种情况,那么你可以在代码中搜索字符串系统< whitespace>(作为一个选项,但即使这样,一个坚定的一方可能只是: #define InoccuousFunction system 绕过你的防御. 如果是这种情况,你可能想要考虑使用像 您需要进行适当的沙盒操作,因为即使您以某种方式阻止它们运行外部程序,它们仍然可以执行危险的操作,例如覆盖文件或打开套接字连接到自己的盒子以发送您的宝贵信息的内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |