2011-05-12 99 views
2

我目前正在開發一款使用PHP和MySql的遊戲。 我想讓用戶能夠使用BBCode解析器(NBBC)顯示圖像,但我已經意識到潛在的安全問題。防止惡意的外部腳本

允許我解釋:

  1. 用戶使用代碼輸入一個URL到一個textarea盒如[IMG] http://example.com/image1.png [/ IMG]

  2. 用戶可以將外部服務器上的image1.png編輯爲存儲用戶信息(ip等)等的服務器端腳本。

  3. 用戶使用信息做一些潛在的討厭的東西!

我的問題是,我們如何防止這種情況發生,並在詳細說明外部來源時保護用戶的詳細信息?

顯而易見的答案是隻允許上傳到您的網站,但在這種情況下,這似乎不太實際。

感謝任何幫助!

回答

2

你不知道。

惡意用戶將能夠獲得的唯一信息是用戶的IP地址和引薦來源URI,因此您只需確保沒有任何有價值的信息被傳送(如會話ID,您可以綁定到IP地址或通過Cookie傳輸)。

2

甚至不需要將該圖像轉換爲腳本。遠程服務器的訪問日誌將捕獲圖像請求,因爲它會向服務器發送任何其他請求。 IP,瀏覽器UA,引用者等...

如果您在用戶提供的數據中允許外部資源,則無法控制這些資源的處理方式。如果此圖像是用於阿凡達(比如說),那麼沒有說遠程用戶最初不能將他們的頭像製作成一隻小狗,然後在最初的小狗圖片被批准後稍後將其改變爲令人討厭的東西。

沒有說用戶無法將頭像URL指向他們自己不擁有的服務器,在這種情況下,其他服務器的運營商會因帶寬被盜用而感到惱火,並將頭像圖片變爲Goatse類型圖像回到帶寬竊賊身上。

總之,如果你允許外部資源,你失去了控制權。把所有的東西都留在家裏,你可以隨時查看它。

+0

關於服務器日誌的好處。更低的水平,我甚至沒有想到! +1 – Treffynnon 2011-05-12 15:29:57

+0

並在向用戶重新提供之前驗證您上傳的內容。我不是說「看它」,而是掃描惡意的,可執行的圖像文件。 – 2011-10-01 03:58:51

3

你不能因爲你的腳本它看起來像一個真正的形象,沒有辦法檢測任何不同的東西。

任何機構都可以使用.htaccess/ForceType來更改任何文件的執行類型,獲取用戶信息並提供圖像作爲響應。

我寫了一個簡單的腳本在用戶論壇簽名很久以前旋轉圖像,並演示了這一過程:通過改變

[img]http://example.com/image1.png[/img] 

成類似http://blog.simonholywell.com/post/374221718/flickering-images

+0

你其實可以,看看我的回答... – haknick 2011-05-12 15:37:20

+0

@haknick謝謝。我已經看到你的答案。事實上,我編輯過,以便在您評論之前更容易閱讀! :-) – Treffynnon 2011-05-12 15:45:55

5

其實你可以:

<img src="http://yourserver/proxy.blah?url=example.com/image1.png" /> 

因此,您的代理將加載圖像,而不是用戶。

+0

這樣用戶請求標頭不會暴露。 – haknick 2011-05-12 15:38:30

0

用戶使用信息做一些潛在的討厭的東西!

你在這裏過分偏執。如果用戶只是通過知道他們的IP就容易受到攻擊,那麼他們的機器已經被百種不同的惡意軟件感染了。

2

儘管有答覆說這不是問題,但它是。有幾種方法可以創建在用戶PC上執行的惡意圖像文件。您也無法控制用戶的瀏覽器是否遵守由第三方服務器返回的MIME類型,以便它可以返回可執行文件而不是圖像,即使您只允許鏈接到帶有圖像擴展名的文件(.png ,. gif,.jpg等)。該交互完全在您的用戶和第三方服務器之間,但因爲它嵌入在您的頁面中,用戶體驗將是任何感染源自您的網站。

但即使假定遠程服務器只發送一個圖像,您不知道圖像是否安全。請參閱:
gifar image vulnerability
Infected .png files
Malicious code hides in jpgs

將影像上傳到您的網站是在公園裏散步或者,as discussed here

+0

最安全的方法是使用一些經過驗證的圖像處理軟件加載並保存上傳的文件,以便您知道您爲用戶提供了真實的圖像文件,因爲您已經創建了它。 – joeytwiddle 2014-01-08 19:32:10