2015-02-10 61 views
0
myClass.php 
    public function clearCache() { 
     // validate input and determine the appropriate cache folder; 
     ... 
     helper::removeFolder($folder); 
} 

helper.php 
    static function removeFolder($folder) { 
     ... 
    } 

第一種方法執行所有輸入驗證以確保我們不會刪除錯誤的文件夾。在PHP中保護一個危險的靜態方法

我想保護從php對象注入和未經授權使用的第二種方法。

現在,我使用這個 How to get the name of the calling class (in PHP)

我與攻擊者利用這樣的方法擦拭敏感數據或整個網站的特別關注檢查調用的類名。這是過度殺傷還是有更好的方法?

任何想法?當然,我只關心遠程攻擊,如果攻擊者可以在我的服務器上放置一個文件並執行它,那麼他們可以自己擦除磁盤。

我使用的是Joomla,如果框架提供了這些功能請提及它。

+4

某人如何將一個對象注入到PHP中,您是eval()是否對用戶輸入進行了解/反序列化或者是否提取了變量或其他東西?無論如何,所有壞主意 – simontemplar 2015-02-10 10:40:26

+4

要建立在@simontemplar說的東西上,如果有人可以從你的代碼遠程運行一個函數,你會遇到更大的問題***。 – 2015-02-10 10:41:50

+0

這是Joomla的擴展。這不是我所關心的代碼(因爲我已經採取了所有可能的措施來確保它的安全),但是有數以千計的擴展,我經常會看到未經驗證的輸入。這會導致嚴重的漏洞,我不希望成爲攻擊者提供更多損害的機會。 – 2015-02-10 11:12:25

回答

1

如果您想阻止他人輕鬆訪問敏感的類函數,第一個選項是隻讓該方法爲private,因此只能在您的類中調用該方法,您可以在其中調用它的方式。這對控制功能的使用而不是作爲安全措施的自己的好處更有幫助;如果有人可以運行自己的PHP腳本來調用你的類,那麼該站點已經被入侵了。

如果您有一個正在用於清除Joomla緩存的removeFolder()調用,首先建議Joomla具有內部緩存管理功能,請參閱JFactory :: getCache(「component」)和$ cache-> clean() ,它更適合管理Joomla緩存的對象。如果你管理你自己的存儲,你可以清理這個函數,所以如果你想讓它更安全的話,它只會相對於你的緩存的根目錄工作 - 可能最大的受益者將會免於你自己錯誤地使用這個調用。

+0

很好的回答;我的組件所做的就是落後Joomla的背後,並用rm -rf清除緩存,這是我真正清除高流量網站緩存的唯一方法(Joomla JCache按文件遞歸分析文件...)。因此,如果在新命中生成時清除緩存,則可以在重新創建使用它們的頁面之後刪除臨時壓縮的資源,例如javascript和css;這將有效地打破網站。 (這不是偏執狂,它實際上發生在幾個高流量的網站)。爲了保護removeFolder()函數,這絕對是偏執狂。 – 2015-02-11 20:39:38

2

首先,我不認爲「檢查調用類名」是幫助程序的一個很好的功能。一個助手應該是一個通用的可重用代碼片斷,並補充說這個限制看起來會重申這個概念。

另一方面,您嘗試的是防止未使用任何其他方法的「removeFolder」,也就是說,基本上不可能(內置函數(如eval和exec)會發生同樣的情況)。在應該關注驗證的地方是使用該函數的方法中,您應該確保所有使用該函數的方法都得到了正確的保護,而不是試圖在暗室內鎖定「removeFolder」。

編輯:也許更偏執的措施可能會使該方法「萬無一失」,並限制它刪除非關鍵文件\文件夾。

+0

你有很多好點,我愛你如何抓住我的偏執狂。 – 2015-02-11 20:45:35