2016-07-18 14 views
-1

私はPHPには本当に新しいんだけど、私は最近、PHPで仕事を急いでいたと、私は次のような構造を持っている何かをした:機密情報のあるPHPファイルのフォルダへのアクセスを拒否する方法は?

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

ルートは、すべてのPHPの取り扱いを含むフォルダです。 JSファイルでは、データをPHPページに投稿し、そのページを処理します。それはすべてうまく動作しますが、私は開示したくない情報が含まれているので、ユーザーが "root"フォルダとPHPファイルにアクセスするのを制限する方法がわかりません。

私も.htacessを試しましたが、500の内部サーバーエラーが発生しました。

+1

なぜあなたは 'ルート' 1レベルの上部を移動しないのですか?したがって、 'public_html'と同じレベルになります。私はこの方法でファイルにアクセスできないと思う(サーバーの設定方法に依存する) –

+0

その後、Javascriptにスクリプトを公開してデータを投稿する方法が必要になる – BeetleJuice

+0

JSはそのような方法でファイルにアクセスできない、 それをできる? – Forget

答えて

1

これは私がやったことです。

移動つのゲートウェイファイル

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

を除いて、パブリックフォルダのうちPHPファイルは、私はgateway.phpに私のPHPスクリプトのためのすべての要求をリダイレクトするための.htaccess を使用しています。このファイルは残りの部分を処理します:a.phpを取得するには、ブラウザはURLを要求する必要があります/php/a/php/b

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

ENDは、より多くのリダイレクトルールを探して停止することを意味します... b.phpに転送されます。 NCは、大文字と小文字を区別しない一致を意味します。 QSAは、リダイレクト先に問合せパラメータがある場合は、それを添付することを意味します。

php.iniには、auto_prepend_fileがscriptsフォルダ内のファイルを指すように設定されています。このファイルはすべての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

私はあなたが正確に隠そうとしているかどうかはわかりませんが、コードは常に実行され、返されたデータだけが取り出せるため、人々はPHPコードをWebサーバーから直接アクセスすることはできません。

ただし、Webルート以外のファイルからインクルードを使用し、Webルート内に必要なデータを返すコードを使用できます。

+0

したがって、悪意のあるユーザーはパブリックフォルダ内のphpファイルにアクセスできません。たとえば、www.website.com/root/config.phpのようなことをして、そのページを開くことはできませんか? – Forget

+0

彼らはできますが、phpタグ( '<?php'と'?> ')の外にあるもの、またはあなたが何者にエコーしても何も表示されません。あなたの設定ページがPHPコードである限り、それらは空白ページのように見えます。 –

関連する問題