2011-07-02 3 views
8

document_root에서 sitewide 암호 키와 DB 액세스 정보를 저장하는 것을 좋아하지 않으므로 conf.d에서 Apache의 SetEnv 및 php.ini 파일을 사용하여 코드베이스와 구분했습니다. 가장 큰 문제는 어느 것이 더 낫습니까? apache vhost 파일 (SetEnv SITEKEY 'oinkoink!') 또는 conf.d/xxx.ini 파일 (db_pass="oink?") 내부의 환경 변수? 다른 뭔가?SetEnv 또는 php.ini에서 DB 변수를 저장하는 것이 얼마나 안전합니까?

총 N 단점 :

적인 SetEnv :

+ DOCUMENT_ROOT 외부에 저장
+ 만 주어진 가상 호스트은 phpinfo()와 -Visible 액세스
이 - 직접 액세스/업로드 파일
에 활용할 필요가 해커를

get_cfg_var :

+ DOCUMENT_ROOT
외부에 저장 6,은은 phpinfo()에 + 표시하지 않음
는 - (아주 나쁜) 모든 정의 된 INI 변수가 포함되어, 각각의 가상 호스트는 (ini_get_all)를 통해이를 조회 할 수 있습니다, 공유 가상 호스트 환경에서 이렇게 사용할 수 없습니다

답변

4

* .ini 및 SetEnv가 웹 루트 (문서 루트) 외부에있는 한 어떤 방식으로도 문제가되지 않습니다. 원하는 것을 선택하십시오. 나는 SetEnv를 좋아하지만 실제로는 개인적인 취향이다. 변수가 _SERVER에 있기 때문에 SetEnv를 사용하는 것이 더 합리적입니다. .ini를 사용하면 코드가 작동하는 방식에 관련된 초기화 설정에 남겨 두는 것이 더 중요하다고 생각합니다.

데이터를 안전하게 보호하기 위해 문서 루트에 저장하지 않는 것이 좋습니다.

phpinfo()은 설정된 서버 변수를 나열하므로 매우주의해야합니다. 당신이 파일을 포함하는 경우

마지막으로, 당신은 무상 ../../ 어떻게 든 사용자가 설정하거나 잠재적 보안 파일에 액세스해야합니다 허용하지 않도록해야합니다 (심지어 /etc/passwd를 포함하여!)

내가 주를 생각한다 질문은 "얼마나 안전합니다." 음, 이것은 아마도 두통을 일으키지 않고 얻을 수있는만큼 안전합니다. PHP 코드는 이러한 변수에 액세스 할 수 있으므로 인쇄하면 쉽게 볼 수 있으므로 코드베이스의 보안 수준에 따라 다릅니다. MySQL과 함께 LDAP를 사용하는 것이 가능할 수도 있지만, 큰 고통처럼 들릴 수 있습니다.

1

그것은 일반적인 관행이다 document_root 외부에 비공개 파일을 저장하는 방법. 전형적인 레이아웃이 될 수있다 :

.../myProject 
.../myProject/documentRoot 
.../myProject/documentRoot/.... 
.../myProject/nonPublicFiles 
.../myProject/nonPublicFiles/... 

스토어 의 DocumentRootnonPublicFiles의 모든 public이 아닌 물건에 PHP 물건. documentRoot는 vHost의 Apache document_root입니다. nonPublicFiles이 외부에 있기 때문에 Apache는 요청에 응답하지 않습니다.

Recarding 보안, 적인 SetEnv는 또는 * .INI은 해당 경향 : 경우 사람이 임의의 PHP 코드를 실행할 수있는 권한을 얻는 두 가지 방법이 코드에 대한 합리적인 정보를 제공합니다. 아파치는 이러한 세부 사항 자체를 공개하지 않습니다 때문에

가 나는 적인 SetEnv* .INI 방법을 선호하는 것입니다. 스크립트가 필요합니다.

잘못된 구성은 스크립트가 없어도 nonPublicFiles의 내용을 공개 할 수 있습니다.

nonPublicFiles을 사용하려는 경우 문제가 발견되면 모든 것이 올바르게 설정되어 있는지 확인하고 전자 메일을 전달하는 스크립트를 준비하십시오. 아마도 CRON을 사용하여 호출 할 것입니다.

+1

"누군가가 임의의 PHP 코드를 실행할 수있는 권한을 얻은 경우 ..."-이 경우 베팅이 모두 해제되고 db cred를 어디에 저장하든 철저히 pwn됩니다. – Asaph

1

나는 비공개 폴더에 저장하는 것을 선호합니다.이 폴더는 아파치에서만 액세스 할 수도 있고 document_root 외부에서 액세스 할 수도 있습니다.

관련 문제