想做一个类似 http://www.udebug.com/ 的网站,简单来说就是获取用户输入,在服务端 C/C++程序中运行,再返回输出给用户。
网站是用 php 写的,目前直接用 apache 用户执行,并且用 ulimit 限制时间内存,在 C/C++代码中加入数据有效性验证,相关代码如下:
$fh = fopen ($filename, "w");
fwrite ($fh,$_POST['userinput']);
fclose ($fh );
exec ("ulimit -m 128000 -t 10;./$program<$filename>$outputfile");
其中$filename 和$outputfile 是随机生成的字符串。程序就放在网站目录中,用.htaccess 拒绝访问请求。
因为验证数据有效性又麻烦又很难考虑周全,目前想对运行的程序进行进一步降权,然后不做数据有效性验证了,就进行资源限制,然后数组访问越界之类由于数据产生的问题都不管了。
目前大致想到两个解决方案:
1.新建一个用户,拒绝其文件系统大部分的访问权(用 ACL ?),然后 apache 加入 sudoer 中, apache 用新建的用户身份执行程序。
2.不新建用户,用 nobody 执行?
不知道这么做会不会带来什么新的安全隐患,以及这个网站安全方面还有什么要注意的地方?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.