2016-07-18 5 views
-1

나는 PHP에 정말로 새로운 해요,하지만 나는 최근 PHP에서 작업을 서두를했고 나는 다음과 같은 구조를 가지고 뭔가했다 :민감한 정보가있는 PHP 파일이있는 폴더에 대한 액세스를 거부하는 방법은 무엇입니까?

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

루트가 모든 PHP 처리를 포함 폴더입니다. JS 파일에서 필자는 PHP 페이지에 데이터를 게시합니다. 그것은 모두 잘 작동하지만 내가 공개하지 않으려는 정보가 포함되어 있기 때문에 "루트"폴더와 PHP 파일에 액세스하지 못하도록 사용자를 제한하는 방법을 모르겠습니다.

나는 또한 .htacess을 시도했지만 500 내부 서버 오류가 발생합니다.

+1

왜 '루트'1 레벨 상단을 이동하지 않습니까? 그래서'public_html'과 같은 수준이 될 것입니다. 나는이 방법으로 파일에 접근 할 수 없다고 생각한다. (서버 설정 방법에 달려있다) –

+0

그러면 자바 스크립트에서 스크립트를 액세스 할 수있는 방법이 필요하다. – 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; 
에 요청을 전달입니다 확인하는 담당하고있다

내 설정이 약간 더 복잡하지만 아이디어를 얻을 수 있습니다. 내 스크립트를 공개 웹 폴더 외부에 보관합니다.

0

정확하게 숨기려는 것이 확실하지 않지만 코드가 항상 실행되고 반환 된 데이터 만 검색 할 수 있기 때문에 사람들은 PHP 코드를 웹 서버를 통해 직접 액세스 할 수 없습니다.

그러나 웹 루트 외부의 파일에서 포함을 사용할 수 있으며 웹 루트 내에서 필요한 데이터를 반환하는 코드를 사용할 수 있습니다.

+0

그래서 악의적 인 사용자가 공용 폴더 내의 PHP 파일에 액세스 할 수 없습니까? 그들은 예를 들어 www.website.com/root/config.php와 같은 것을 할 수없고 그 페이지를 열 수 없습니까? – Forget

+0

그들은 잊어 버릴 수 있지만, PHP 태그 ('') 또는 사용자에게 반향하는 내용 만 볼 수 있습니다. config 페이지가 PHP 코드 인 한, 빈 페이지처럼 보일 것입니다. –

관련 문제