2016-11-01 91 views
-1

我爲客戶託管一個網站,我們被要求爲客戶其他第三方網站商店託管一些額外的圖像。這是PHP代碼惡意,我如何保護我的託管?

因此,我創建了一個輔助FTP帳戶,其根目錄設置爲託管上的某個子文件夾。

客戶端有網頁設計師正在構建這個外部網站的佈局,在這個FTP空間的所有圖像。

今天我注意到了error_log中的一些警告通知,並注意到它來自同樣在這個FTP空間中的php文件。

的PHP的內容是這樣的:

<?php 
ini_set('display_errors',1); 
$file1=trim($_REQUEST['f1']); 
$read1=file_get_contents($file1); 
$read1 = rawurlencode($read1); 
echo "document.write(unescape(\"$read1\"))"; 
?> 

當我第一次讀碼我無法弄清楚,爲什麼它是在FTP空間或什麼沒有,但我開始加入一些玩弄路徑到f1參數以查看返回的響應,並且我發現我可以輸出我的wordpress安裝wp-config.php文件,該文件是從此FTP根文件夾返回的文件夾。

例如通過運行這個參數通過PHP腳本。它輸出我的配置的內容: domain.com?f1=/mnt/storage/vhosts/domain.com/httpdocs/wordpress/wp-config.php

現在我只是想弄明白這個代碼本來可以放在FTP存儲中的任何其他原因,而不是惡意?

如何保護我的文件不會像這樣在讀取託管子文件夾的FTP訪問權限時被讀取?

謝謝。

+0

只是不給任何人的根,但你... – Fusseldieb

+0

PHP文件**將**執行,但你可以防止它對你的服務器造成損害。只需設置足夠的權限,並且不**與其他用戶共享一個root帳戶。 – Fusseldieb

+0

在互聯網上閱讀「chown」和「chmod」(如果您在服務器上使用linux) – Fusseldieb

回答

1

該腳本打開在GET參數中傳遞的文件,讀取它,對其進行編碼,然後將其發送到包裝在某些JavaScript中的瀏覽器中,該JavaScript將客戶端解碼。

該腳本實際上保證寫入惡意目的。雖然輸出文件的內容可能具有合法用途,但這裏使用的(非常基本的)混淆技術將其推到了任何合理懷疑的邊緣。

您的用戶的FTP根目錄可能受到保護,但似乎您並未爲您的用戶運行單獨的PHP解釋器。這意味着任何可以將代碼寫入其Web空間並通過PHP解釋器執行的用戶都可以運行代碼,無論PHP解釋器運行的用戶是誰。由於PHP一定需要閱讀wordpress配置,因此您無法保證當前的安裝。

理想情況下,您希望將自己的chroot或docker實例中的每個用戶與他們自己的PHP解釋器進行隔離。除此之外,您絕對不應該允許FTP訪問或任何其他方法上傳您的系統上的文件,因爲安全模型根本沒有設計爲承受此級別的用戶訪問。

+0

謝謝。我想我會爲圖像創建一個子域名,然後關閉這個子域名的PHP。 – user2129024

+0

我刪除了PHP文件,並注意到在外部商店網站上顯示的一些錯誤。從控制檯中的錯誤中,我可以確認他們正在使用php腳本來獲取存儲在FTP空間中的html文件的內容。 – user2129024

+0

所以我需要PHP,我確實需要這個腳本來工作。我只需要停止腳本訪問主機中的文件。爲此,我將open_basedir改爲使用{DOCROOT} {/} {:} {TMP} {/}這意味着php腳本只能訪問子域上的文件。 – user2129024