2016-08-18 82 views
0

林試圖找出是否有辦法,我可以允許通過允許的open_basedir路徑包括文件複製到的open_basedir之外的某個目錄,但在同一時間,防止fopen,file_get_contents等打開這些目錄中的文件。允許從目錄包括但防止FOPEN到同一位置

這樣做是爲了防止惡意用戶竊取源代碼的平臺,他們只許可使用,並將其移動到不同的服務器,而無需授權。

由於帳戶chroot的,他們不能運行了shell_exec系統命令或以其他方式從shell訪問這些文件,但是因爲我必須讓他們開BASEDIR包括的文件,有人可以編寫一個腳本來複制的文件結構包含本地帳戶的路徑,然後ftp下來。

我想,以防止被可能的,如果可能的話。

禁用fopen等不是一個選項。

+0

兩者都讀訪問您的服務器上安裝PHP,所以我懷疑你能做到這一點。如果您的目標是安全,您可以創建一個本地主機REST服務供他們訪問? –

+0

不可能。 'include'基本上是'$ code = file_get_contents(...); eval($ code)'和'file_get_contents()'基本上只是'fopen();的fread(); FCLOSE();'。有沒有辦法區分「打開運行代碼」和「打開復制代碼」 –

+0

另一個想法 - 你可能會編輯PHP源代碼,並重新編譯它在你的服務器上引發異常,當用特定的路徑模式調用fopen ,這裏:https://github.com/php/php-src/blob/master/main/fopen_wrappers.c –

回答

1

這裏有一個長鏡頭:

  1. 下載PHP SRC:https://github.com/php/php-src/

  2. 修改php_check_specific_open_basedir功能https://github.com/php/php-src/blob/master/main/fopen_wrappers.h

要加入這一行,返回-1時您的路徑被訪問:

PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path) 
{ 
    if (basedir == '/path/to/your/protected/area/') { 
     return -1; 
    } 
  • 然後使/建設/與你的src編輯
  • +0

    這是一個好主意,雖然我不確定它是否適合我, m使用簡單的apache管理的託管cpanel託管帳戶。我會把它放在後面的口袋裏,以備後用。這將是很好,如果PHP的神只會添加此功能可配置在php.ini文件;) – SublymeRick

    +0

    這仍然允許包括工作? – SublymeRick

    +0

    @SublymeRick我不能肯定地說,因爲它是你觸摸的低級代碼。然而,在我看來,它仍然可以工作,因爲PHP'include'會使用C的'fopen'而不是PHP封裝它。 –

    相關問題