2009-07-23 68 views
2

我想讓用戶測試我的PHP類,其中包括裁剪圖像和調整圖像大小。將文本輸入解釋爲PHP

我想他們寫PHP代碼中的文本字段,將表格,然後將自己的代碼會被執行。我怎樣才能做到這一點?

還是讓用戶(任何人)演示PHP類的其他安全方法?

+1

讓用戶運行他們的PHP代碼沒有安全的方法。 – RaYell 2009-07-23 12:46:22

回答

4

是的。你可以在php中使用eval語句(前面鏈接約翰http://us2.php.net/manual/en/function.eval.php),但要非常小心。你真的不希望用戶能夠自由地在你的機器上運行代碼。

我的建議是儘量想出不同的方法做演示 - 也許是一個靈活的幾個例子......但不要讓他們跑了代碼直接

1
+1

這會工作,但非常危險。 – 2009-07-23 12:47:44

+3

這不是非常危險,這是非常危險的。 – 2009-07-23 12:51:14

+0

如果你不採取一些預防措施,這只是危險的。 – 2009-11-15 23:19:57

5

我會使用用戶帳戶產卵的PHP程序具有無與倫比的權限。將讀寫權限授予單個目錄,但就是這樣。

你還是開自己的DoS具有無限循環並且這樣的攻擊,但如果你絕對必須這樣做,然後運行該代碼在這個非常低的權限沙箱像IE和Chrome瀏覽器執行。

使用EVAL可能是最糟糕的主意。

3

可能使用eval()函數,但不要做。認真。

沒有「安全」的方式讓任何老用戶在您的服務器上運行他們自己的PHP。你正在接觸一個潛在的傷害世界。

相反,對於自己的演示提供出色的文檔,代碼樣本和源,並鼓勵潛在用戶試用它自己的測試/開發服務器。

2

因爲它已經指出,你可以使用eval功能,但它是非常危險的。如果您希望用戶測試代碼,準備展示可能使用情況的演示頁面,並且可以通過用戶通過HTML表單添加參數。

0

不認爲PHP的條款或其他通用的語言,認爲最小的語言,它足以表達你的圖像處理領域的業務。用戶使用該域特定語言(DSL)提交表達式,這些表達式在服務器端解析並傳遞給您的代碼。

最重要的是想想圖像處理操作的範圍以及它們如何組合。這會告訴你語言的表現力如何。一旦你解決了這個問題,語言在語法上會有多種選擇。語言的語法可能取決於易用性和易於解析之間的折衷。

如果你能寫或找到這種表達式解析器,它可能是用戶最容易。其實,任何人都可以推薦一個現有的表達式評估器,可以在這種情況下工作(例如,Smarty能否安全地運行用戶提交的表達式?),或者確實是PHP的解析器生成器?

resize(rotate("foo.png", 90), 50) 

this語言可能是用戶不容易,但它可以使用一個相當簡單的堆棧機進行處理:

"foo.png" 90 rotate 50 resize 

更容易,這樣一種基於XML的語言不需要自己的解析器:

<resize percent="50"><rotate degrees="90"><img src="foo.png"></rotate></resize> 

使用DSL不能保護你免受特定領域的攻擊,例如有人可能使用上面的語言,將圖像調整到數不勝數像素nd用盡所有的服務器內存。因此,必須爲DSL提供某種運行時環境,以限制任何用戶提交的腳本可以使用的資源數量。

0

您可以使用eval,但不是沒有一些預防措施。

如果您的安全問題僅僅是「謹慎」而不是「偏執狂」,你有幾種選擇:

  • 如果你有一個專門的Apache/PHP的實例就是爲這個項目你,集php.ini中的disable_functions選項並關閉所有與文件和網絡相關的功能。這將影響整個PHP安裝,並會破壞一些令人驚訝的事情,如phpmyadmin。
  • 如果您沒有專用服務器,請嘗試'runkit':http://php.net/manual/en/book.runkit.php以僅在已經運行的腳本中禁用功能。
  • 也許更多的工作?設置一個虛擬機(VirtualBox,VMware等),這個虛擬機在主機操作系統內被極大地防火牆分配內存和磁盤空間,然後在那裏運行不受信任的代碼。

如果您是偏執狂......爲所有上傳的代碼設置審批流程。