[英]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.