2015-04-28 56 views
2

嗨,我是網絡編程新手。我正在開發一個PHP後端應用程序的網站。我使用Ubuntu 14.04服務器,Apache,PHP 5.5和Mysql。 目前,這是在/ var/www/html等我的目錄結構:通過.htaccess保護網絡服務器的正確方法

example.com 
    app/ # this dir contains the backend 
    src/ # this contains some common stuffs between front and back ends 
    web/ # this is the 'public directory' which serves the frontend 

我搜索了很多關於htaccess的,但我不能指出一個明確的解決方案,以確保所有.php文件不屬於入web/目錄。另外,我想「隱藏」通過URL重寫PHP文件(例如,而不是服務於mysite.org/accounts.php我將成爲mysite.org/accounts,但不只是去掉擴展名爲.php,而重定向到mysite.org/accounts一個名爲文件,說,youwillneverknowthis.php)。

在此先感謝。

J.

回答

-2
  1. 爲了保護您的PHP文件,不要把他們在公共html目錄,因爲它是通過互聯網進行訪問。包含私有代碼的文件應該從該目錄中取出。把它們放在私人目錄如/var/www/php/srcvar/www/php/app
  2. 現在你希望用戶能夠在不暴露敏感的PHP代碼的情況下獲得「page.php」。一種解決方案是在名爲gateway.php的公共目錄/var/www/html中有一個腳本,該腳本在專用目錄dir中查找名爲file的文件並執行其內容。 $ _GET的值來自下面的步驟4。在要求文件之前,請務必清理輸入以防止惡意演員使gateway.php運行糟糕的腳本。例如,您可以將請求的文件與允許文件的白名單進行比較,如果不匹配則停止執行。

    <?php #gateway.php 
    if (empty($_GET['file'])): 
        //the file is missing 
        http_response_code(400); //bad request 
        exit; 
    else: 
        $file = realpath(rawurlencode("/var/www/php/$_GET[dir]/$_GET[file]")); 
    
        //SAFE_SCRIPTS is a string constant: whitelist of allowed files 
        //eg:define("SAFE_SCRIPTS",'"path/to/a.php","path/to/b.php"') 
        if(strpos(SAFE_SCRIPTS,$file)===false): 
         //script is not in the whitelist 
         http_response_code(403);//Forbidden 
         trigger_error("Forbidden script: $file"); 
         die("Access to this resource is forbidden"); 
        endif; 
        require $file; 
    endif; 
    
  3. 你的下一個問題是關於URL重寫,這樣mysite.org/accounts可以重定向到youwillneverknowthis.php)。在公共文檔根var/www/html中放置一個名爲.htaccess的文本文件。添加以下規則(每行一條規則):RewriteEngine on。這會啓用url重寫

  4. 要重定向url,請添加以下規則(單行):RewriteRule ^accounts$ gateway.php?dir=src&file=youwillneverknowthis.php [QSA,L]根據需要調整dir和file參數。這會將用戶重定向到gateway.php,然後在後臺讀取並執行私有代碼。查詢字符串追加[QSA]標誌可確保將任何預先存在的查詢參數連同dirfile參數一起傳遞給gateway.php[L]標誌讓重寫引擎知道在找到匹配時停止處理和重定向。

希望有所幫助。

編輯:用消毒輸入

+1

關於#2,使用該方法,無需消毒的投入將讓用戶包括網絡服務器有權讀取任意文件提高安全性。 https://en.wikipedia.org/wiki/File_inclusion_vulnerability用單一入口點構建應用程序會更好,而不用擔心哪些請求會路由到哪些文件。 –

+0

我不同意這裏的很多東西。其中之一是「放置一個名爲.htaccess的文本文件(沒有名稱,只是擴展名)'.htaccess不是擴展名但不是名稱的文件,它只是一個隱藏文件(實際上沒有擴展名)。此外@mtinsley指出了一些嚴重的安全問題。 –

+0

謝謝你們的反饋!我調整了我的解決方案;請讓我知道你在想什麼。 – BeetleJuice

相關問題