2010-03-26 89 views
0

也許這不是真的可行。但基本上,我一直在開發一個片段共享網站,我希望它有一個「現場演示區」。用戶提交代碼的安全防範措施和技巧演示區

例如,您正在瀏覽一些片段並單擊演示按鈕。彈出一個執行網頁代碼的新窗口。

我知道有參與這樣一個極大的安全隱患 - 通過下載,pr0n,XSS,標籤,討厭的惡意軟件/驅動器等等,等等等等

社區將能夠是標誌意見書公然調皮,但顯然有些不會被發現(並且在很多情況下,有人必須成爲受害者才能發現任何討厭的東西被提交)。

所以我需要知道: 我應該做什麼 - 安全明智 - 確保用戶可以提交代碼,但沒有惡意可以運行 - 或執行異地等?

爲了您的信息,我的網站是由PHP使用CodeIgniter。

傑克

+1

片段是否完全是Javascript? – Iraklis 2010-03-26 18:49:17

+1

如果您想要真正的安全性,您必須開發一種技術,將您知道「安全」的代碼列入白名單。 – 2010-03-26 18:55:28

回答

1

弗蘭克指出,如果你想保持高安全級別使用白名單技術。這當然有一個價格(可能太嚴格,難以實施)。

另一種方法是開發黑名單技術。即只允許沒有觸發任何鈴聲的代碼。這很容易,因爲你必須指定更少的東西,但它不會捕獲新的漏洞。

網絡上有很多關於這兩種技術的信息。

依賴於CodeIgniters安全功能(XSS過濾等)不會讓你感覺很遠,因爲大部分代碼片段都不被允許通過。

不管你做什麼,你一定要記住這一點:

不要以爲惡意代碼的目標將只是傷害你的網站的訪客。它可能會通過你的解析器/代碼檢查器來破壞你的服務器。例如,可以說Alice上傳了片段foo。 Alice有意識地使用該片段,以便解析器將由於XSS漏洞利用而將其標記爲惡意。假設您的解析器還會使用惡意代碼更新數據庫以供進一步調查。 Alice知道這一點。隨着XSS漏洞利用Alice在代碼片段中注入了一些SQL代碼,這樣當你將代碼片段插入數據庫時​​,它會做各種不好的事情。

如果你真的是偏執狂,你可以有一個孤立的服務器,它的唯一責任就是檢查代碼片段。因此,在WCS中,只有低風險的服務器會受到影響,並且您(希望)有足夠的時間來修復/審計情況。

希望這會有所幫助。

0

爲了您的信息,我的網站是由PHP驅動使用笨

對不起傑克,如果你認爲這是在毫釐有關你從瞭解任何有效的答案很長的路要走問題 - 更不用說能夠區分無效的問題。

您創建的任何沙箱都會阻止某人攻擊您的計算機或您的客戶,因此這些沙箱限制性很強,您的客戶將無法做得比「打印」更多。

你需要在一個自定義的chroot jail上運行一個suhosin的CLI版本 - 並且爲每個腳本單獨提供獨立的環境將是完全不切實際的。

C.

0

假設你只允許JavaScript代碼,那麼你應該做到以下幾點 -

  1. 購買是無法識別您的域扔掉的域名
  2. 即成用戶在一次性域名託管的iframe中輸入的代碼

這實質上就是iGoogle所做的。它會阻止XSS,因爲您使用的是不同的域。我知道的唯一漏洞是邪惡的代碼可以改變網頁的位置。

如果你打算分享服務器端代碼片段,那麼它是一個不同的球賽。對於java/jsp片段,您可以使用JVM的內部安全類在沙箱中運行代碼。如果你是谷歌,你應該找到很多關於這方面的信息。我想這是谷歌在App Engine中使用的(我不確定)。

除了Java以外的任何東西,我不確定如何保護。 Dot Net也許有一個類似的概念,但我懷疑你可以以類似的方式沙盒PHP代碼片段。

1

你不能白名單或黑名單PHP,它只是不起作用。如果你寫了,我可以使用,或阻止我使用惡意功能的命令列表,是什麼阻止我從寫作:

$a = 'mai'; 

{$a .'l'}('[email protected]', 'You suck', 'A dodgy message sent from your server'); 

不能白名單或黑名單PHP。