wp-config를 웹 루트 외부로 옮기는 것이 실제로 유익합니까?


135

요즘 가장 일반적인 보안 모범 사례 중 하나는 vhost의 문서 루트보다 한 디렉토리 위로 이동하는wp-config.php 것 같습니다 . 나는 그에 대한 좋은 설명을 찾지 못했지만 웹 루트 내에서 악성 또는 감염된 스크립트가 데이터베이스 비밀번호를 읽을 수 없도록 위험을 최소화한다고 가정합니다.

그러나 WordPress에서 계속 액세스해야하므로 open_basedir문서 루트 위에 디렉토리를 포함 하도록 확장해야 합니다. 그것은 전체 목적을 무효화하고 잠재적으로 서버 로그, 백업 등을 공격자에게 노출시키지 않습니까?

아니면 기술 이 PHP 엔진에 의해 파싱되는 대신 wp-config.php요청하는 모든 사람에게 일반 텍스트로 표시 되는 상황을 막기 위해 노력하고 http://example.com/wp-config.php있습니까? 그것은 매우 드물게 발생하는 것처럼 보이며 HTTP 요청에 로그 / 백업 등을 노출시키는 단점을 능가하지 않습니다.

다른 파일을 노출시키지 않고 일부 호스팅 설정에서 문서 루트 외부로 문서를 이동할 수 있지만 다른 설정에서는 그렇지 않을 수 있습니까?


결론 : 이 문제에 대해 많은 이야기를 나눈 후, 권위있는 질문으로 생각해야 할 두 가지 답변이 나왔습니다. Aaron Adams는 wp-config 이동선호 하는 좋은 사례를 제시 하고 chrisguitarguy는 이에 대한 좋은 사례를 제시합니다 . 스레드에 익숙하지 않고 전체 내용을 읽고 싶지 않은 경우 읽어야 할 두 가지 답변입니다. 다른 답변은 중복되거나 부정확합니다.


질문에 대한 답변을 선택하고 다른 모든 답변을 거부 할 필요는 없습니다. 아래에서 볼 수 있듯이, 스택 교환 투표 시스템은 사람들에게 적합한 답변에 투표하는 반면 질문자는 "허용 된 답변"메커니즘과 자신의 상 / 하 투표를 사용해야합니다.
Kzqai

6
내가 한 질문의 99 %에 대해서는 그렇게하지 않지만이 특정 경우에 적합하다고 생각했습니다. 질문에 대한 8 가지 답변이 있으며 그중 일부는 상당히 길거나 복잡하며 일부는 부정확 한 정보를 포함하거나 대화에 아무것도 추가하지 않았음에도 불구하고 많은 투표를했습니다. 나는 반 정식 결론을 제공하는 것이 처음으로 실을 읽는 사람들에게 도움이된다고 생각합니다. 언제나 그렇듯이 독자들은 자신의 마음을 자유롭게 구성 할 수 있습니다. 방금 OP로 내 의견을 제시하고 있습니다.
Ian Dunn

1
@Kzqai : "스택 교환 투표 시스템"은 민주적 인 과정이며, 참가자들은 종종 1) OP가 실제로 요청하거나 해결하려는 것이 확실하지 않으며 2) 특정 답변의 타당성을 이해하지 못하는 경우가 많습니다. 답변이 접수되고 투표가 완료된 후, OP 가 도움 을 제공 한 답변을 명확하게하는 것이 도움이됩니다. 결국 OP는 아는 유일한 사람이며 더 많은 OP가 그렇게되기를 바랍니다. 그렇습니다. 사람들은 "사람에게 이해가되는 답변을 표명"하지만 OP가 그에게 의미가있는 것에 대해 마지막 말을하도록합시다.
Mac

답변:


127

짧은 대답 : 예

이 질문에 대한 대답은 명백한 예 이며, 그렇지 않으면 완전히 책임을지지 않습니다 .


긴 대답 : 실제 사례

wp-config.php웹 루트 외부 로 이동 하면 컨텐츠가 캡처되지 않는 실제 서버에서 실제로 실제 예제를 제공 할 수 있습니다.

버그 :

Plesk의 버그에 대한이 설명을 살펴보십시오 (11.0.9 MU # 27에서 수정 됨).

Plesk가 구독 계획과 구독을 동기화 한 후 하위 도메인 전달을 재설정합니다 (117199).

무해한 소리 지?

글쎄, 여기이 버그를 유발하기 위해 한 일이 있습니다.

  1. 다른 URL로 (예를 들어, 리디렉션 하위 도메인을 설정 site.staging.server.com하는 방법에 대해 site-staging.ssl.server.com).
  2. 구독 서비스 계획을 변경했습니다 (예 : PHP 구성).

이 작업을 수행했을 때 Plesk는 하위 도메인을 기본값으로 재설정했습니다 ~/httpdocs/.

그리고 나는 몰랐다. 몇 주 동안.

결과:

  • 으로 wp-config.php웹 루트에, 요청이하는 /wp-config.php워드 프레스 구성 파일을 다운로드 한 것입니다.
  • 으로 wp-config.php웹 루트 외부 요청이하는 /wp-config.php완전히 무해한 파일을 다운로드. 실제 wp-config.php파일을 다운로드 할 수 없습니다.

따라서 wp-config.php웹 루트 외부로 이동 하면 실제 환경에서 실질적인 보안 이점을 얻을 수 있습니다 .


wp-config.php서버의 임의의 위치 로 이동하는 방법

WordPress는 자동으로 WordPress 설치 위의 wp-config.php파일 중 하나의 디렉토리를 자동으로 찾게 되므로 파일이 이동 한 위치가 완성되었습니다!

하지만 다른 곳으로 옮겼다면 어떨까요? 쉬운. wp-config.php다음 코드를 사용하여 WordPress 디렉토리에 새 파일 을 작성하십시오 .

<?php

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');

위의 경로를 재배치 된 wp-config.php파일 의 실제 경로로 변경 하십시오.

에 문제가 발생하면 PHP 구성 open_basediropen_basedir지시문에 새 경로를 추가하십시오 .

open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"

그게 다야!


반대로 논쟁을 따기

wp-config.php웹 루트 외부로의 이동에 대한 모든 주장 은 잘못된 가정에 달려 있습니다.

인수 1 : PHP가 비활성화되어 있으면 PHP는 이미

누군가가 [ wp-config.php]의 내용이 서버를 우회하는 경우에만 PHP 인터프리터 를 볼 수있는 유일한 방법입니다 ... 이런 일이 발생하면 이미 문제가있는 것입니다.

FALSE : 위에서 설명한 시나리오는 침입이 아니라 잘못 구성된 결과입니다.

인수 2 : 실수로 PHP를 비활성화하는 것은 드물기 때문에 중요하지 않습니다.

공격자가 PHP 처리기를 변경할 수있는 충분한 액세스 권한이 있다면 이미 문제가있는 것입니다. 내 경험상 우발적 인 변경은 매우 드물기 때문에이 경우 암호를 쉽게 변경할 수 있습니다.

FALSE : 위에서 설명한 시나리오는 일반적인 서버 구성에 영향을주는 일반적인 서버 소프트웨어 버그의 결과입니다. 이것은 거의 "드물다"(그리고 보안은 드문 시나리오를 걱정하는 것을 의미한다).

WTF : 침입 후 비밀번호를 변경하면 침입 중에 민감한 정보를 수집 한 경우 거의 도움이되지 않습니다. 실제로 WordPress는 일반적인 블로그 작업에만 사용되며 공격자는 훼손에만 관심이 있다고 생각합니까? 누군가가 들어온 후 복원하는 것이 아니라 서버를 보호하는 것에 대해 걱정합시다.

인수 3 : 접근을 거부하는 wp-config.php것만으로 충분합니다

가상 호스트 구성 .htaccess을 통해 파일에 대한 액세스를 제한 하거나 문서 루트 외부로 이동하는 것과 같은 방식으로 파일에 대한 외부 액세스를 효과적으로 제한 할 수 있습니다.

FALSE : 가상 호스트의 서버 기본값이 PHP 없음 .htaccess, 아니오 , allow from all프로덕션 환경에서는 거의 드문 경우입니다. 예를 들어, 패널 업데이트와 같은 일상적인 작업 중에 구성이 재설정되면 모든 것이 기본 상태로 돌아가고 노출됩니다.

설정이 실수로 기본값으로 재설정 될 때 보안 모델이 실패하면 더 많은 보안이 필요합니다.

WTF : 왜 아무도 보안 계층을 더 적게 추천할까요? 비싼 자동차에는 자물쇠 만있는 것이 아닙니다. 알람, 이모빌라이저 및 GPS 트래커도 있습니다. 보호 할만한 가치가 있다면 올바르게하십시오.

인수 4 : 무단 액세스 wp-config.php는 별 문제가되지 않습니다

데이터베이스 정보는 실제로 [ wp-config.php] 에서 유일하게 민감한 정보입니다 .

FALSE : 인증 키와 솔트는 여러 가지 잠재적 인 하이재킹 공격에 사용될 수 있습니다.

WTF :의 데이터베이스 자격 증명이 유일하다고해도 공격자가 데이터베이스 자격 증명을 얻는 것에 대해 두려워wp-config.php 해야 합니다.

인수 5 : wp-config.php웹 루트 외부로 이동 하면 실제로 서버의 보안 수준이 떨어집니다

여전히 WordPress에 [ wp-config.php] 액세스를 허용 해야하므로 open_basedir문서 루트 위에 디렉토리를 포함 하도록 확장해야 합니다.

FALSE : 가정 wp-config.php에있는 httpdocs/단지로 이동, ../phpdocs/및 설정 open_basedir만을 포함 httpdocs/하고 phpdocs/. 예를 들어 :

open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"

(항상 /tmp/, 또는 사용자 tmp/디렉토리 (있는 경우)를 포함해야합니다.)


결론 : 구성 파일은 항상 항상해야 항상 웹 루트 외부에 수

보안에 신경 쓰면 wp-config.php웹 루트 외부 로 이동 합니다.


1
아파치, 리눅스 또는 관리자의 두뇌에 버그가 있으면 어떤 경우에도 건배됩니다. 시나리오에서 웹 사이트의 루트에서 서버의 다른 위치에서 구성이 잘못 될 가능성이 더 높은 이유를 설명하지 못합니다. 잘못 구성된 아파치는 아마도 /config.php처럼 쉽게 /../config.php에 액세스 할 수 있습니다
Mark Kaplun

1
당신은 "어쨌든 토스트하지 않습니다." 그것은이다 매우 가능성 , 심지어 명백한 당신의 - 버그는 "토스트"없는 경우에 기본으로 웹 루트의 존재 리셋,이 발생할 것이라고 wp-config.php유적 안전합니다. 그리고는 매우 황당한 본질적으로 불가능하기 위해 너무 많은 - - 버그가 웹 루트는 당신이 배치 한 정확한 디렉토리에 다시 임의 당할 것이다 wp-config.php.
Aaron Adams

1
@IanDunn 사실, wp-config.php임의의 위치 로 쉽게 이동할 수 있습니다. 내 답변에 지시 사항을 추가했습니다. 그것은 단지 wp-config.php실제의 위치를 ​​참조하는 WordPress 디렉토리에 더미 를 만드는 것만 포함 합니다.
Aaron Adams

3
이 응답은 현장에 있습니다. 웹 호스팅 회사에서 드라이브 배열 오류가 발생했습니다. 모든 말을 마치고 시스템을 부분적으로 복원했습니다. 그들이 일련의 cPanel / WHM 스크립트를 사용하여 그렇게 잘못 된 httpd.conf 파일을 다시 빌드 한 것으로 나타났습니다. 운 좋게도 doc 루트 외부에 이미 wp-config.php가 있었지만 내용이 없으면 복용 할 내용이있었습니다. 네, 드물지만, 언급 한 바와 같이 드문 경우가 걱정됩니다. 또한 "간단한 사람들이 잃어 버릴 것"이라고 말하는 것은 LESS 보안에 대한 나쁜 변명입니다.
랜스 클리블랜드

1
좋은 지적이야, 아론 나는 이것과 다른 주석 스레드에서 언급 한 이유로 여전히 약간 회의적이지만, 당신은 그것이 원래 생각했던 것보다 더 많은 장점을 가지고 있다고 확신했습니다. 적어도 제대로 완료되면 아무것도 아프지 않을 것이라고 생각합니다. 나는 여전히 그것을 홍보하는 대부분의 사람들이 그 이유를 이해하지 못하는 것 같다는 사실에 여전히 문제가 있으며, 그들이 가르치는 방식은 종종 httpdocs 위의 디렉토리가 노출 될 수 있지만, 너의 답.
Ian Dunn

40

가장 큰 것은 wp-config.php데이터베이스 사용자 이름 / 비밀번호 등 민감한 정보 가 포함되어 있다는 것입니다 .

따라서 아이디어는 문서 루트 외부로 옮기면 아무것도 걱정할 필요가 없습니다. 공격자는 외부 소스에서 해당 파일에 액세스 할 수 없습니다.

그러나 문지름은 다음과 같습니다. wp-config.php실제로 화면에 아무것도 인쇄하지 않습니다. WP 설치 전체에서 사용되는 다양한 상수 만 정의합니다. 따라서 누군가 파일의 내용이 서버 PHP 인터프리터를 우회하는 경우 .php파일을 일반 텍스트로 렌더링하는 것입니다. 이런 일이 발생하면 이미 문제가있는 것입니다. 서버에 직접 액세스 할 수 있고 루트 권한이있을 수 있으며 원하는대로 할 수 있습니다.

계속해서 보안 관점에서 문서 루트 외부 로 이동 wp-config하면 이점이 없다고하겠습니다 .

  1. 가상 호스트 구성 또는 .htaccess를 통해 파일에 대한 액세스를 제한하여 문서 루트 외부로 이동하는 것과 동일한 방식으로 파일에 대한 외부 액세스를 효과적으로 제한 할 수 있습니다
  2. wp-config충분한 권한이없는 사용자가 SSH를 통해 서버에 액세스 할 수있는 경우에도 파일 권한을 엄격히 제한하여 파일을 읽을 수 없도록 할 수 있습니다 .
  3. 중요한 정보, 데이터베이스 설정은 단일 사이트에서만 사용됩니다. 따라서 공격자가 해당 정보에 액세스하더라도 wp-config.php파일이 속한 WordPress 설치 만 영향을 줄 것 입니다. 더 중요한 것은, 해당 데이터베이스 사용자는 해당 WP 설치 데이터베이스를 읽고 쓸 수있는 권한 만 있고 다른 사용자에게는 권한을 부여 할 수있는 권한이 없다는 것입니다. 다시 말해, 침입자가 데이터베이스에 액세스 할 수있는 경우 이는 단순히 백업에서 복원하고 (포인트 4 참조) 데이터베이스 사용자를 변경하는 것입니다.
  4. 자주 백업합니다. 종종 상대적인 용어입니다. 매일 20 개의 기사를 게시하면 매일 또는 며칠마다 백업하는 것이 좋습니다. 일주일에 한 번 게시하는 경우 일주일에 한 번 백업하면 충분합니다.
  5. 사이트의 버전 제어 ( 예 :이 )는 공격자가 액세스하더라도 코드 변경을 쉽게 감지하고 롤백 할 수 있음을 의미합니다. 공격자가에 액세스 할 수 wp-config있는 경우 다른 것으로 엉망 일 수 있습니다.
  6. 데이터베이스 정보는 실제로 유일하게 민감한 정보이며 wp-config, 조심해야하기 때문에 (3 및 4 참조) 큰 문제가되지 않습니다. 소금 등은 언제든지 변경할 수 있습니다. 발생하는 유일한 일은 로그인 한 사용자의 쿠키를 무효화한다는 것입니다.

나에게, wp-config문서에서 벗어나 보안에 대한 애매한 태도는 애매 모호합니다.


2
그래, 그게 내가 생각했던 것과 거의 비슷하다. 나는 내가 유일하지 않다는 것을 알게되어 기쁘다 :) 누군가가 설득력있는 반론이있는 경우를 대비하여 다른 하루나 이틀 동안 질문을 열어두고 싶습니다. 그러나 지금까지 이것은 정답입니다. 나를.
Ian Dunn

3
사소한 수정 : 문서 루트에서 wp-config.php 파일을 이동하면 보안 상 이점 이 없습니다 . 보안과 관련이없고 비정상적인 설정에만 적용되는 다른 이점도 있습니다.
Otto

4
가능한 잘못된 신화를 얻으려면-불가능한 일이 있습니까? 서버 측에 문제가 생길 수 있습니다.이 경우 PHP 코드가 화면에 인쇄됩니까?
Stephen Harris

3
@IanDunn 그러나 가장 좋은 답변은 그 계층 구조에서 그것을 별도의 계층으로 옮기는 것을 옹호하는 것입니다.이 로그는 당신의 질문에 대한 대답을 다루지 않습니다. 다른 보안 조치는 유익하며 보안에 대해 걱정하지 않도록 안심시킵니다. 모든 사람들은 집이 도둑 맞을 때까지 안전하다고 생각합니다. 그 후 그들은 더 나은 일을합니다. 보안 수준이 낮더라도 일부 사람들은 결코 강도를 느끼지 않지만 보안 수준을 낮추는 것이 좋은 조언은 아닙니다.
AndrewC

4
이것들은 좋은 점이지만 이것들에 대한 나의 가장 큰 문제는 예방적인 주장이 아니라 교정적인 주장이라는 것입니다. 이 중 대부분은 A) 누군가가 db 사용자를 올바르게 처리했다고 가정하고 B) 백업을 가지고 있기 때문에 그다지 중요하지 않은 방법에 대해 이야기합니다. woocommerce와 같은 것을 사용하거나 민감한 정보를 데이터베이스에 저장하면 어떻게됩니까? 그럼 당신은 망했다.
Goldentoa11

25

Max 's는 지식이 풍부한 답변이라고 생각합니다. 워드 프레스 코덱스 더 많은 조언이 있습니다 :

또한 사용자와 웹 서버 만이 파일을 읽을 수 있는지 확인하십시오 (일반적으로 400 또는 440 권한을 의미 함).

.htaccess가있는 서버를 사용하는 경우 해당 파일 (맨 위)에 파일을 저장하여 서핑하는 사람에 대한 액세스를 거부 할 수 있습니다.

<files wp-config.php>
order allow,deny
deny from all
</files>

wp-config.php에 400 또는 440 권한을 설정하면 플러그인이 플러그인을 쓰거나 수정하지 못할 수 있습니다. 예를 들어 플러그인 캐싱 (W3 Total Cache, WP Super Cache 등)과 같은 경우가 있습니다.이 경우 600 ( /home/user디렉토리의 파일에 대한 기본 권한)을 사용합니다 .


5
맥스가 답이다. 그에게 +1. 단순히 확장하려고합니다.
its_me

1
Aahan Krish, 당신은 황소의 눈을 맞았습니다. 추가해 주셔서 감사합니다.
Max Yudin

htaccess를 사용하여 wp-config.php에 대한 HTTP 요청을 거부하면 문서 루트 외부로 이동하는 것과 동일한 결과를 얻지 못하지만 logs / backups / etc 등을 노출시키지 않고 결과를 얻지 못합니까?
Ian Dunn

4
@IanDunn 문서 루트가 무엇인지에 달려 있습니다. (1)의 워드 프레스가 디렉토리에 호스팅 된 경우 디렉토리 외부로 public_html이동 wp-config.php하면 디렉토리에있게됩니다 public_html. 이 경우 htaccess 규칙을 사용하여 wp-config.php에 대한 HTTP 요청을 거부해야합니다. (2) WordPress가 public_html디렉토리 바로 아래에 설치 되면 한 단계 위로 => /home/user디렉토리 로 이동합니다 . 이 경우 파일이 문서 루트 외부에 있으므로 매우 안전합니다. 파일의 권한을 600 (또는 더 엄격한 440 또는 400)으로 설정할 수 있습니다.
its_me

@IanDunn 내가 말했듯이, 이것은 기본적인 이해이며 보안 전문가는 아닙니다. :)
its_me

17

누군가 우리에게 빛을달라고 요청했는데 여기에 회신하겠습니다.

예, 사이트의 루트 디렉토리에서 wp-config.php를 분리하면 보안상의 이점이 있습니다.

1- PHP 핸들러가 어떤 식 으로든 깨지거나 수정되면 DB 정보가 노출되지 않습니다. 그리고 예, 서버 업데이트 중에 공유 호스트 에서이 문제가 몇 번 발생하는 것을 보았습니다. 예, 해당 기간 동안 사이트가 손상되지만 비밀번호는 그대로 유지됩니다.

2- 모범 사례는 항상 구성 파일을 데이터 파일에서 격리하는 것이 좋습니다. 그렇습니다. WordPress (또는 모든 웹앱)로는 그렇게하기가 어렵지만 위로 올리면 약간 분리됩니다.

3- 누구나 파일에? -s를 전달하고 소스를 볼 수있는 PHP-CGI 취약점을 기억하십시오. http://www.kb.cert.org/vuls/id/520827

결국, 세부 사항은 작지만 위험을 최소화하는 데 도움이됩니다. 특히 공유 환경에있는 경우 누구나 데이터베이스에 액세스 할 수 있습니다 (필요한 것은 사용자 / 패스).

그러나 사이트를 올바르게 보호하기 위해 실제로 필요한 것보다 작은 방해 요소 (조기 최적화)가 나오지 않도록하십시오.

1- 항상 업데이트 유지

2- 강력한 비밀번호 사용

3- 액세스를 제한합니다 (권한을 통해). 여기에 대한 게시물이 있습니다.

http://blog.sucuri.net/2012/08/wordpress-security-cutting-through-the-bs.html

감사,


여러분, 생각을 더 해주셔서 감사합니다. 나는 우리가 이미 다른 답변과 그 의견에서 그 점의 대부분을 공격했다고 생각합니다. 1) 예, 가능하지만 드문 일입니다. 2) 예, 이점이 있지만 최소한입니다. 3) 예, 가능하지만 이러한 유형의 취약점은 다시는 발생하지 않을 것입니다.이를 방지하는 것은 whac-a-mole을 재생하거나 사람들이 공항에서 신발을 벗게하는 것과 같습니다. 한 번 신발. 반동적이고 미래에 이익을 얻지 못할 것입니다.
Ian Dunn

다양한 토론에서 질문은 "혜택이 있습니까?"에서 수정되었습니다. "좋아요. 몇 가지 장점이 있지만 위험보다 더 큰가요?" 필자가 언급 한 주요 위험은 PHP가 웹 루트 외부의 스크립트에 액세스 할 수 있도록 openbase_dir 범위를 확장해야한다는 사실입니다. Plesk를 많이 사용하는 설정을 포함한 많은 호스팅 설정은 로그, 백업, 웹 루트와 격리되어야하는 개인 FTP 영역 등을 웹 루트 위의 디렉토리에 저장합니다. 따라서 해당 디렉토리에 PHP 액세스 권한을 부여하는 것은 심각한 취약점이 될 수 있습니다.
Ian Dunn

15

분명하게 예입니다.

wp-config.php를 퍼블릭 디렉토리 외부 로 옮기면 PHP 핸들러가 악의적으로 (또는 실수로!) 변경 될 때 브라우저를 사용하여 읽지 않도록 보호합니다.

Lame 관리자의 결함으로 서버가 거의 감염되지 않은 경우 DB 로그인 / 암호를 읽을 수 있습니다. 관리자에게 벌금을 부과하고 더 우수하고 안정적인 서버 호스트를 확보하십시오. 더 비쌀 수도 있지만.


4
공격자가 PHP 처리기를 변경할 수있는 충분한 액세스 권한이 있다면 이미 문제가있는 것입니다. 내 경험상 우발적 인 변경은 매우 드물기 때문에이 경우 암호를 쉽게 변경할 수 있습니다. 이러한 것들에 비추어 볼 때, 확장 된 open_basedir범위로 인해 로그 / 백업 등이 노출 될 위험이 있다고 생각 하십니까?
Ian Dunn

1
이전 -rwx보다 더 높은 디렉토리에 액세스 한 적이 public_html없으므로에 익숙하지 않습니다 open_basedir. 내 로그는 별도의 디렉토리에 있으므로 백업이 수행됩니다. 나는 그것이 모든 공유 호스트가 가지고 있다고 생각합니다.
Max Yudin

호스트는 매우 다양합니다. 표준 디렉토리 구조가 없습니다. Plesk (공유 호스트에 가장 많이 사용되는 제어판 중 하나)는 /var/www/vhosts/example.com/statistics/logs에 로그를 저장하며 문서 루트는 /var/www/vhosts/example.com/httpdocs입니다. wp-config.php를 /var/www/vhosts/example.com/wp-config.php로 이동하려면 전체 example.com 디렉토리에 스크립트 액세스 권한을 부여해야합니다.
Ian Dunn

도메인 디렉토리에 없다면 로그와 백업은 어디에 저장되어 있습니까? 그들은 제어판이나 다른 것을 통해 액세스 할 수 있습니까?
Ian Dunn

1
예, 제어판을 통해.
Max Yudin

8

인수를 위해 wp_config.php 파일을 이동한다고해서 반드시 상위 디렉토리로만 이동해야한다는 것은 아닙니다. / root / html과 같은 구조가 있다고 가정 해 봅시다. 여기서 html에는 WP 설치 및 모든 HTML 내용이 포함되어 있습니다. wp_config.php를 / root로 옮기는 대신 html 디렉토리 외부에 있으며 서버 루트 디렉토리에도없는 / root / secure ...와 같은 것으로 이동할 수 있습니다. 물론,이 보안 폴더에서도 PHP를 실행할 수 있는지 확인해야합니다.

WP는 / root / secure와 같은 형제 폴더에서 wp_config.php를 찾도록 구성 할 수 없으므로 추가 단계를 수행해야합니다. wp_config.php를 / root / html에두고 민감한 부분 (데이터베이스 로그인, 소금, 테이블 접두사)을 잘라 내고 config.php라는 별도의 파일로 옮겼습니다. 그런 다음 includewp_config.php에 다음과 같이 PHP 명령을 추가하십시오 .include('/home/content/path/to/root/secure/config.php');

이것은 본질적으로 설정에서 수행 한 작업입니다. 이제 위의 논의를 바탕으로 여전히 필요한지 또는 좋은 아이디어인지 평가하고 있습니다. 그러나 위의 구성이 가능하다는 것을 추가하고 싶었습니다. 백업 및 기타 루트 파일은 노출되지 않으며 보안 폴더가 자체 공용 URL로 설정되어 있지 않으면 찾아 볼 수 없습니다.

또한 다음 위치에 .htaccess 파일을 만들어 보안 폴더에 대한 액세스를 제한 할 수 있습니다.

order deny,allow
deny from all
allow from 127.0.0.1

마이클, 공유해 주셔서 감사합니다. 그래도 실제 환경에서 시도해 보았습니까? 내가 생각하는 open_basedir지시어는 전체 소요 트리를 액세스하기 위해, 그래서 /root/secure에서 /root/html, 사용자가 설정해야 할 것 open_basedir으로 /root.
Ian Dunn

당신의 아이디어를 작동하게하기 위해, 나는 당신이 설치 디렉토리 구조 등을 필요 거라고 생각 /root/httpdocs/config/accessible, httpdocs등 기록을 보유하고, 백업,; config보유 wp-config.php하고 accessible워드 프레스의 모든 컨텐츠를 보유하고 있습니다. 문서 루트를에 다시 매핑하려면 vhost 구성 등을 수정해야합니다 accessible. 그래도 기본 설정에서 wp-config에 대한 HTTP 요청을 거부하는 것보다 이점이 없습니다.
Ian Dunn

1
php.net/manual/en/ini.core.php#ini.open-basedir 에 따르면 : "Windows에서는 세미콜론으로 디렉토리를 분리하십시오. 다른 모든 시스템에서는 디렉토리를 콜론으로 분리하십시오. Apache 모듈로, 상위 디렉토리의 open_basedir 경로가 이제 자동으로 상속됩니다. " 따라서 하나의 트리에있을 필요없이 여러 디렉토리를 설정할 수 있습니다.
Michael

방금 테스트 한 결과가 옳아 보입니다. 그래도 Apache를 통해 파일에 대한 액세스를 거부하는 것보다 어떤 보안 이점이 있는지 확실하지 않습니다.
Ian Dunn

@IanDunn 아론 아담스 '대답을 잘 해결
AndrewC

4

atatckers가 코드를 삽입 할 수 있도록하는 나쁜 글씨와 플러그인이 많이 있습니다 (Timthumb의 보안 문제를 기억하십시오). 공격자라면 왜 wp-config.php를 검색해야합니까? 이 코드를 간단히 주입하십시오 :

var_dump( DB_NAME, DB_USER, DB_PASSWORD );

wp-config.php를 숨길 수 있습니다. WordPress가 모든 중요한 정보를 전역 적으로 액세스 할 수있게하는 한 wp-config.php를 숨기는 것은 아무런 이점이 없습니다.

wp-config.php의 나쁜 부분은 민감한 데이터를 보유한다는 것이 아닙니다. 나쁜 부분은 민감한 데이터를 전역 액세스 가능한 상수로 정의하는 것입니다.

최신 정보

define()민감한 데이터를 전역 상수로 정의하는 것이 좋지 않은 이유와 이유 를 분명히하고 싶습니다 .

웹 사이트를 공격하는 방법에는 여러 가지가 있습니다. 스크립트 삽입은 웹 사이트를 공격하는 한 가지 방법 일뿐입니다.

서버에 공격자가 메모리 덤프에 액세스 할 수있는 취약점이 있다고 가정합니다. 공격자는 메모리 덤프에서 모든 변수의 모든 값을 찾습니다. 전역 액세스 가능한 상수를 정의하면 스크립트가 끝날 때까지 메모리에 남아 있어야합니다. 상수 대신 변수를 만들면 변수가 더 이상 필요하지 않은 후 가비지 수집기가 메모리를 덮어 쓰거나 해제 할 가능성이 높습니다.

민감한 데이터를 보호하는 더 좋은 방법은 사용 후 즉시 삭제하는 것입니다.

$db_con = new stdClass();
$db_con->db_user = 'username';
$db_con->password = 'password';
$db_con->host = 'localhost';

$db_handler = new Database_Handler( $db_con );

$db_con = null;

민감한 데이터를 사용한 후에는에 할당하면 null메모리의 데이터를 덮어 씁니다. 공격자는 $db_con중요한 데이터 가 포함 된 순간에 메모리 덤프를 가져와야합니다. 그리고 위의 예에서는 Database_Handler 클래스가 사본을 저장하지 않으면 시간이 매우 짧습니다.


이 답변은 질문을 직접 다루지 않습니다. 모든 플러그인 작성자는 코드를 설치하고 악의적 인 의도를 가지고 있다고 확신하면 WordPress로 현장 하루를 보낼 수 있습니다. 시스템에 바이러스를 기꺼이 설치하는 것과 다르지 않습니다. wp-config.php를 움직이지 않는이 주장은 의미가 없습니다. 이것은 자동차에 차 폭탄을 고의로 설치하면 자동차 알람을 쓸모 없게 만드는 것과 같습니다. 기술적으로 사실이지만 WTF?!?
랜스 클리블랜드

2
아니요, 무의미하지 않습니다. 문제는 : wp-config.php를 숨겨 데이터베이스 계정을 보호 할 수 있습니까? 대답은 분명합니다. 아니요. '자동차 경보로 자동차 폭탄을 막을 수 있습니까?'라고 묻는 것과 같습니다. 데이터베이스 액세스 또는 ftp 액세스를 보호 할 때 wp-config를 숨겨도 다른 이점은 없습니다. 둘 다 세계적인 범위에 있습니다. 공격자가 코드를 주입하지 않고 전역 변수에 액세스 할 수있는 더 많은 방법이 있다고 확신합니다.
Ralf912

원래 질문에 "wp-config.php를 숨겨서 데이터베이스 계정을 보호 할 수 있습니까?"라는 메시지가 표시되지 않습니다. 원래 질문은 "wp-config.php를 옮기는 것이 합리적입니까?"였습니다. 정답은 '그렇다'이다. 외출 할 때 현관 문을 잠 가야하는지 묻는 것과 같습니다. "누군가가 쉽게 창문을 부수고 들어갈 수 있으므로 왜 귀찮게합니까?"라고 말하는 것이 질문의 기본 요점에 대답하지 않습니다. IMO의 질문은 "wp-config.php를 옮기는 데 추가 노력을 기울일 가치가 있습니까? 그렇게하는 어떤 이점이 있습니까?"였습니다. 예. 최소한 게으른 해커를 차단합니다.
랜스 클리블랜드

2
가장 일반적인 보안 모범 사례 중 하나는 ... 매우 중요한 지점을 놓친 것입니다. 공격자가 관심있는 대상은 무엇입니까? 그리고 wp-config.php를 어떻게 스타일링하지 않았 습니까? wp-config에 정의한 값으로 공격자가 검사됩니다. 정문으로 예를 잡으십시오 : wp-config를 숨기는 것은 정문을 잠그는 것과 동일하지만 모든 금을 정원에 보관하지 마십시오. wp-config에 정의 된 모든 값은 전체적으로 정의됩니다. 따라서 모두 wp-config 외부에서 액세스 할 수 있습니다. wp-config를 숨겨도 값은 여전히 ​​존재합니다.
Ralf912

1
이동을 선호하는 사람들은 wp-config.php가 호스트에서 실행되는 다른 PHP 코드에 노출 될 수있는 시나리오보다는 HTTP 요청을 통해 일반 텍스트로 표시 될 수있는 시나리오로부터 보호하려고한다고 생각합니다.
Ian Dunn

-1

보안상의 이점 외에도 핵심 WordPress 파일을 하위 모듈 / 외부로 유지하면서 WordPress 인스턴스를 버전 제어 상태로 유지할 수 있습니다. Mark Jaquith가 WordPress-Skeleton 프로젝트를 설정 한 방법입니다. 자세한 내용은 https://github.com/markjaquith/WordPress-Skeleton#assumptions 를 참조하십시오.


8
그는 문서 루트에 외부가 아닌 문서 루트에 설정되어 있으므로이 질문과 관련이 없습니다. 질문에 대한 기술 은 WordPress 설치 폴더 위의 하나의 디렉토리가 아니라 호스트의 문서 루트wp-config.php 하나의 디렉토리 를 이동하도록 지정 합니다. 요점은 HTTP 요청으로 읽을 수있는 폴더 외부로 가져 오는 것입니다.
Ian Dunn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.