2016-07-18 47 views
-1

我真的新到PHP,但我不得不最近趕在PHP中的工作,我做了一件具有以下結構:如何拒絕使用敏感信息的PHP文件訪問文件夾?

public_html 
| 
|- html 
|- css 
|- js 
|- root 

根是包含所有的PHP處理文件夾。在JS文件中,我將數據發佈到一個PHP頁面,然後完成它的工作。它一切正常,但我不知道如何限制用戶訪問該「根」文件夾和PHP文件,因爲它包含我不想透露的信息。

我也試過.htacess,但它給500內部服務器錯誤。

+1

爲什麼不移動'root' 1級上部?所以將與'public_html'處於同一級別。我認爲這種方式的文件將無法訪問(取決於你如何配置你的服務器) –

+0

然後,他/她需要一種方法,使腳本可以訪問的Javascript發佈數據給他們 – BeetleJuice

+0

JS無法以這種方式訪問​​文件, 它可以? – Forget

回答

1

這就是我所做的。

移動的PHP文件出來公用文件夾的除了一個網關文件

scripts/ 
    prepend.php 
    a.php 
    b.php 
public_html/ 
    gateway.php 
    html files 
    css files 
    js files 

我用的.htaccess爲我的PHP腳本的所有請求重定向到gateway.php。這個文件完成剩下的工作:獲得a.php,瀏覽器需要請求url /php/a/php/b將被轉發到b.php ...

RewriteEngine On 
RewriteBase/ 
RewriteRule ^php/(.*) gateway.php?file=$1.php [END,QSA,NC] 

END意味着停止尋找更多的重定向規則。 NC表示不區分大小寫的匹配。 QSA表示將查詢參數(如果有的話)附加到重定向目的地。

php.ini中,我設置auto_prepend_file指向腳本文件夾中的文件。這個文件在所有的PHP腳本之前運行,所以我可以用它來做一些配置。部分它有一個允許的PHP腳本列表。

prepend.php

//the only scripts that will be allowed to run (besides gateway.php) 
Const SAFE_SCRIPTS = '"/path/to/gateway.php","/path/to/a.php" ...'; 
Const SCRIPTS_PATH = __DIR__; //this file should be in the scripts directory 

//block unnknown files. This will prevent a malicious file from running 
$file = $_SERVER['SCRIPT_FILENAME'];//should be /path/to/gateway.php 
if(strpos(SAFE_SCRIPTS,"\"$file\"")===false) {http_response_code(404);exit;} 

gateway.php負責確保所請求的PHP文件是允許列表將請求轉發到正確的文件

//get the file requested. Comes from the htaccess rule 
$file = SCRIPTS_PATH.'/'.$_GET['file']; 

//if file is not in the allowed list, abort 
if(strpos(SAFE_SCRIPTS,"\"$file\"")===false) {http_response_code(404);exit;} 

//load the file that will handle the request 
require SCRIPTS_PATH.'/'.$file; 
的和

我的設置稍微複雜一點,但你明白了。將我的腳本保留在公共Web文件夾之外。

0

我不確定你想要準確隱藏的內容,但是人們無法直接通過Web服務器訪問您的PHP代碼,因爲代碼將始終運行,並且只有返回的數據可以被檢索。

但是,您可以使用來自Web根目錄之外的文件的包含內容,並使代碼在Web根目錄中返回所需的數據。

+0

因此,惡意用戶無法訪問公用文件夾內的php文件?他們不能像www.website.com/root/config.php那樣做一些事情,並打開上述頁面? – Forget

+0

@忘記他們可以,但他們只會看到php標籤('<?php'和'?>')之外的東西或者任何迴應給用戶的東西。只要你的配置頁面是php代碼,它就會看起來像一個空白頁面給他們。 –