Resposta curta: sim
A resposta a esta pergunta é um sim inequívoco , e dizer o contrário é completamente irresponsável .
Resposta longa: um exemplo do mundo real
Permitam-me fornecer um exemplo muito real, do meu servidor muito real, onde a movimentação para wp-config.php
fora da raiz da web impedia especificamente que seu conteúdo fosse capturado .
O inseto:
Dê uma olhada nesta descrição de um bug no Plesk (corrigido no 11.0.9 MU # 27):
O Plesk redefine o encaminhamento de subdomínio após sincronizar a assinatura com o plano de hospedagem (117199)
Parece inofensivo, certo?
Bem, aqui está o que eu fiz para acionar esse bug:
- Configure um subdomínio para redirecionar para outro URL (por exemplo,
site.staging.server.com
para site-staging.ssl.server.com
).
- O plano de serviço da assinatura foi alterado (por exemplo, sua configuração PHP).
Quando fiz isso, o Plesk redefiniu o subdomínio para os padrões: exibir o conteúdo de ~/httpdocs/
, sem intérpretes (por exemplo, PHP) ativos.
E eu não percebi. Por semanas.
O resultado:
- Com
wp-config.php
a raiz da web, uma solicitação para /wp-config.php
baixar o arquivo de configuração do WordPress.
- Com
wp-config.php
fora da raiz da web, uma solicitação para /wp-config.php
baixar um arquivo completamente inofensivo. wp-config.php
Não foi possível baixar o arquivo real .
Portanto, é óbvio que wp-config.php
sair da raiz da web traz benefícios de segurança autênticos no mundo real .
Como mudar wp-config.php
para qualquer local no seu servidor
O WordPress procurará automaticamente um diretório acima da instalação do WordPress para o seu wp-config.php
arquivo; portanto, se foi para onde você o moveu, está pronto!
Mas e se você o mudou para outro lugar? Fácil. Crie um novo wp-config.php
no diretório WordPress com o seguinte código:
<?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');
(Certifique-se de alterar o caminho acima para o caminho real do seu wp-config.php
arquivo realocado .)
Se você tiver algum problema open_basedir
, basta adicionar o novo caminho à open_basedir
diretiva na sua configuração do PHP:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
É isso aí!
Separando argumentos em contrário
Todo argumento contra a wp-config.php
saída da raiz da web depende de suposições falsas.
Argumento 1: se o PHP estiver desativado, eles já estão no
A única maneira de alguém ver esse conteúdo de [ wp-config.php
] é contornar o intérprete de PHP do servidor ... Se isso acontecer, você já está com problemas: eles têm acesso direto ao seu servidor.
FALSO : O cenário que descrevi acima é resultado de uma configuração incorreta, não de uma invasão.
Argumento 2: Desabilitar acidentalmente o PHP é raro e, portanto, insignificante
Se um invasor tiver acesso suficiente para alterar o manipulador de PHP, você já está ferrado. Mudanças acidentais são muito raras na minha experiência e, nesse caso, seria fácil alterar a senha.
FALSO : O cenário que descrevi acima é o resultado de um bug em um software comum de servidor, afetando uma configuração comum de servidor. Isso dificilmente é "raro" (além disso, segurança significa se preocupar com o cenário raro).
WTF : Alterar a senha após uma invasão dificilmente ajuda se informações confidenciais foram coletadas durante a invasão. Realmente, ainda achamos que o WordPress é usado apenas para blogs casuais e que os invasores estão interessados apenas em desfiguração? Vamos nos preocupar em proteger nosso servidor, não apenas em restaurá-lo depois que alguém entrar.
Argumento 3: Negar acesso a wp-config.php
é bom o suficiente
Você pode restringir o acesso ao arquivo via sua configuração de host virtual ou
.htaccess
- efetivamente limitando o acesso externo ao arquivo da mesma maneira que a movimentação fora da raiz do documento.
FALSO : Imagine sua padrões do servidor para um host virtual são: não PHP, não .htaccess
, allow from all
(dificilmente incomum em um ambiente de produção). Se sua configuração for de alguma forma redefinida durante uma operação de rotina - como, por exemplo, uma atualização do painel - tudo voltará ao seu estado padrão e você será exposto.
Se seu modelo de segurança falhar quando as configurações forem acidentalmente redefinidas para os padrões, você precisará de mais segurança.
WTF : Por que alguém recomendaria especificamente menos camadas de segurança? Carros caros não têm apenas fechaduras; eles também têm alarmes, imobilizadores e rastreadores de GPS. Se algo vale a pena proteger, faça o que é certo.
Argumento 4: acesso não autorizado a wp-config.php
não é grande coisa
As informações do banco de dados são realmente as únicas coisas sensíveis em [ wp-config.php
].
FALSO : As chaves de autenticação e os sais podem ser usados em qualquer número de possíveis ataques de seqüestro.
WTF : Mesmo se as credenciais do banco de dados fossem a única coisa wp-config.php
, você deve ter pavor de um invasor colocar as mãos nelas.
Argumento 5: Mover-se para wp-config.php
fora da raiz da Web torna um servidor menos seguro
Você ainda precisa permitir que o WordPress acesse [ wp-config.php
], então você precisa expandir open_basedir
para incluir o diretório acima da raiz do documento.
FALSE : Assumindo que wp-config.php
está dentro httpdocs/
, basta movê-lo para ../phpdocs/
e definido open_basedir
para incluir apenas httpdocs/
e phpdocs/
. Por exemplo:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
(Lembre-se de sempre incluir /tmp/
, ou seu tmp/
diretório de usuários , se você tiver um.)
Conclusão: os arquivos de configuração devem sempre estar sempre localizados fora da raiz da web
Se você se preocupa com segurança, sairá wp-config.php
da raiz da web.