2011-09-29 131 views
3

我有這樣一個類:添加嵌入腳本到PHP頁面

class Person { 
    function __construct($name) { 
     $this->name = $name; 
    } 
    function show() { 
     echo $this->name; 
    } 
} 

在我的PHP頁面,我想有一個文本框,讓我無論是在類型的自定義語言腳本或PHP腳本(不以某種安全漏洞),如:

PHP例子:在頁面上

$me = new Person("Alexander"); 
    $me->show(); 

而看到輸出與show()函數的結果。顯然,我不希望人們編寫惡意代碼。這是如何完成的?我對這種編程沒有任何經驗。

問題域示例:

交互式「學習php」網站。用戶可以輸入php並查看結果,而無需設置自己的Web服務器。

「編寫一個攻擊腳本」遊戲。用戶對他們的車隊AI進行編程並觀察對抗計算機AI的戰鬥結果。

+0

我認爲這更適合程序員。這個網站是關於具體的代碼和具體問題。 – hakre

+1

爲什麼要重新發明輪子?有鍵盤,提琴手等等。對於這種事情。無論如何,如果你只是想學習一些東西,那麼嘗試一下,但是運氣好的話,你最初的三角形/方形的嘗試可以看起來更圓滑。 –

+0

鍵盤和提琴手不會幫助我添加嵌入式腳本到我的PHP程序。 –

回答

1

最簡單的選擇是運行沙盒虛擬服務器。您也可以嘗試PHP sandbox,雖然看起來不夠。

最終,最安全的方法是創建您自己的解釋器,它們根本沒有能夠讓惡意腳本執行任何破壞性任務的能力(即它們在現實世界中沒有影響),這是一個可以填寫書籍。解釋器將代碼轉換爲虛擬機可執行的格式,該虛擬機模擬您想要支持的任何系統功能並提供沙盒系統調用(儘管後者也可由您創建的解釋器庫提供)。將這個項目放在虛擬機上讓您可以支持多種語言,而無需爲每個語言創建一個執行程序。微軟的CLIVES就是一個例子。

對於具有更多信息的書籍,基本上compilers/interpretersvirtual machines上的任何內容都與主要相關。有關VM的更多信息,另請參閱「Good literature about making a VM」,「Simple Interpreted Language Design & Implementation」。

+0

書不會嚇到我。任何建議? –