![](/img/trans.png)
[英]how can I write to a processes stdin and read from its stdout while it is still running?
[英]How to run a script that can only write to STDOUT and read from STDIN?
我希望我的用户编写代码并在受控环境(例如Lua或Perl)中运行它。 我的网站在Perl CGI上运行。 有没有一种方法可以运行隔离的perl / Lua / python / etc脚本而不访问文件系统,并通过stdout返回数据以保存在数据库中? 我需要的是一个安全的环境,如何应用限制? 提前致谢。 仅供参考:我想实现ideone.com或codepad.org之类的东西
我一直在阅读有关Lua或内联代码中的沙箱的信息,但它们不允许我限制资源和时间,而只能限制操作。 我想我会有一个虚拟机并在其中运行代码,有什么提示吗?
我想到的一个想法是为每个用户创建一个chroot的env,并在该chroot的env中运行用户的脚本。
如果您打算使用Lua,请查看Lua用户Wiki上的以下页面:
正如jpjacobs在Lua中所说,您可以通过创建沙箱来创建保存环境。 在Lua中执行此操作的一种方法是覆盖标准的不安全函数,然后调用您自己的函数。
检查以下示例:
function safeIORead()
--do the processing
end
io.read = safeIORead
这样,每次调用函数io.read都会指向您的函数,而不是标准的Lua函数。 这只是如何在Lua中使用沙箱的示例。
对于Perl,您可能想要使用安全模块。 正如Joqus所提到的,您将提供自己的输入/输出功能,这些功能由您控制。 不过这不是为胆小的人准备的。 如果您不确定自己在做什么,请不要将此类内容暴露给互联网。
好吧,对于Lua模块,只需将关键模块设置为nil即可:
io = nil
require = nil
dofile = nil
-- etc ...
这样,您可以毫无问题地运行Lua脚本,我还认为您可以使用loadstring函数和setfenv来为用户代码定义自己的环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.