Como faço para ocultar minha instalação do Wordpress via htaccess?

9

(Estou ciente de que a segurança via obscuridade não é recomendada).

Estou tentando esconder o fato de que estou usando o Wordpress. Esta postagem é útil, mas aborda apenas o conteúdo (mais ou menos). Estou interessado em que ocorra o seguinte:

  1. O usuário tenta acessar qualquer URL wp*como uma substring pelo navegador.

    Resultado: redirecionado para a página 404.

  2. User blog / administrador sabe, a fim de entrar eles devem ir para http://example.com/blogin/.

    Resultado: o apache os redireciona parahttp://example.com/wp-admin/.

  3. Se um usuário tentar acessar diretamente wp-admindo navegador, ele será enviado para o número 1.

    Resultado: redirecionado para a página 404.

Coisas que fiz até agora

  1. Percebi em uma instalação padrão do WordPress que eu poderia acessar qualquer um dos wp*arquivos no diretório raiz (relativo) da instalação do WP. Especificamente, wp-settings.phpfoi problemático porque deu informações sobre minha configuração. Se um usuário o acessasse, ele vomitaria alguns erros de PHP e revelaria parte da estrutura de diretórios. Eu editei meu arquivo php.ini para display_errorsdesligar. Agora, o acesso http://example.com/wp-settngs.phpexibe uma página em branco.

  2. Isso por si só não é ideal, porque revela que wp-settings.phpexiste. De fato, wp*é possível acessar todos os arquivos diferentes (com resultados diferentes). Em seguida, coloquei o seguinte no meu arquivo htaccess:

          RewriteEngine On
          RewriteBase /
          RewriteCond %{PATH_INFO} wp* [NC]
          RewriteRule .* - [F]
    

    Isso funcionou muito bem! Qualquer coisa com a wp*foi roteada para minha página 404 personalizada. Mas agora não consigo acessar minha página de administrador.

  3. Tentei inserir esta linha no código acima: RewriteRule ^blogin wp-admin [NC,R,L]. Era para ser logo depois, RewriteBasemas isso não funcionou.

  4. Eu tentei fazer um:

    <Directory /home/example/wp*> 
     Order Allow, Deny 
     Allow from example.com 
     Deny from all 
    </Directory> 
    

    esperando que um referenciador do meu site (através da reescrita da regra) possa acessar o wp-admin, mas não alguém de fora. Isso também não funcionou. O apache reclamou que você não pode usar esta diretiva do htaccess.

Eu li a documentação do apache; Entendo os conceitos, teoricamente, mas preciso de ajuda prática.

EDIT: Estou procurando uma solução que use .htaccess em vez de httpd.conf, pois minha instalação específica torna o httpd.conf inconsistente.

Avery Chan
fonte
Você já tentou renomear todos os arquivos wp * para um prefixo diferente, além de alterar todas as referências a esses arquivos? Eu acho que isso será a coisa mais fácil de fazer. Obviamente, você pode reescrever URLs, mas precisará garantir que todos os links também não usem nomes wp *, o que é (na minha opinião) bastante semelhante à sugestão original.
LazyOne
Eu acho que um dos benefícios da reescrita de URL é que os recursos solicitados podem ser remapeados para outro prefixo ... Espero poder fazer isso sem renomear todos os arquivos (que é o ponto de passar por isso) ...
Avery Chan

Respostas:

8

TLDR; Não é possível ocultar o WordPress usando apenas diretivas no seu arquivo .htaccess.

Agora vem uma história de aflição e horror. Nosso amigo, fbh estava certo sobre a dificuldade de esconder o WordPress, não para covardes de barriga amarela. Arr! Aqui estão os detalhes desta (des) aventura. Sede avisados!

Motivação

Eu sou um daqueles caras que gosta de coisas perfeitas. Vou gastar tempo perdendo a engenharia de algo para ser o 'caminho certo'. Uma das coisas que eu não gostei na configuração padrão do WordPress foi que um usuário poderia digitar http://ex.com/wp-settings.php e todo esse jargão php seria espalhado por todo o lugar. Acabei conseguindo desativar os erros via PHP, mas isso levou a um desejo maior de ter apenas coisas que desde então eram recursos localizáveis ​​do servidor ... e que todo o resto seria 404 / 3'ified para a nossa página de pesquisa personalizada. Depois disso, tive a ideia de que gostaria de ocultar completamente a estrutura subjacente (ou seja, WP) ... de qualquer forma ... se você quiser ocultar o WP, é possível. Mas é realmente difícil.

Passos para sua desgraça

  1. Modifique suas configurações de ini do PHP adequadamente. (ou seja, desative os erros de exibição) Você pode pensar que isso é desnecessário porque, se estivermos usando o .htaccess para redirecionar as coisas, as pessoas não verão erros porque não podem acessar o erro que está causando os recursos (estou olhando para você wp-settings.php). Mas podem ocorrer erros nas páginas exibidas, então você definitivamente os deseja. Só porque as WP_*diretivas são definidas não significa necessariamente que as coisas vão funcionar da maneira que você pensa que elas irão. Eu descobri que no meu servidor eu precisava definir os display_errors como false PRIMEIRO, porque WP_DISPLAY_ERRORS supunha que a configuração padrão era falsa.

    Controlar as configurações de ini do PHP pode ser algo tão simples quanto colocar uma diretiva no seu arquivo .htaccess. Ou, no meu caso, tão complicado quanto criar um manipulador CGI e colocar um arquivo php.ini lá. YMMV, dependendo da sua configuração.

  2. Remova todo o acesso aos arquivos / diretórios com wp-prefixo. A idéia é que sua implantação do WP seja sobre o seu conteúdo, não sobre o WP (a menos que seja especificamente focado no WP). Não faz sentido para as pessoas quererem ver o que http; // ex.com/wp-cron.php tem ... a menos que não sejam boas. Eu consegui isso através deste:

     # If the resource requested is a `wp-*` file or directory, poop to a 403. 
     RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] 
     RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
     RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
     RewriteCond %{REQUEST_FILENAME} -d [NC] 
     RewriteRule .* - [F,L] 
    
  3. Aprenda a passar pelo mordor Ao remover todo o acesso, wp-*você não poderá mais obter acesso à parte administrativa do WP. Isso é realmente péssimo. Além desse infortúnio, você acabou de perceber que não sabe o que RewriteCond %{ENV:REDIRECT_STATUS} ^$realmente faz. Bem, o que eu tentei fazer é me dar um backdoor 'secreto' para a página de administração do WP. Eu usei este código:

     # If the resource requested is 'mordor' (with or without an ending
     # slash) do a URL rewrite to `wp-login.php`. 
     RewriteCond %{REQUEST_URI} mordor/?$ [NC]
     RewriteRule mordor/?$ /wp-login.php [NC,L]
    

    Portanto, o URL: http://ex.com/mordor deve nos levar à página de login. O motivo pelo qual tínhamos a REDIRECTlinha na etapa acima é que, como esse URL é reescrito em um wp-*URL, não queremos a primeira regra de reescrita para obtê-lo. Como está sendo redirecionado internamente, REDIRECT_STATUSserá definido corretamente e não nos levará a 403/4 do terreno.

  4. Remover wp-content O Wordpress.stackexchange tem um ótimo artigo sobre como remover wp-content. Você precisa redefinir algumas constantes do WP e isso praticamente funciona. Você também precisa redirecionar todos os acessos de wp-contentpara 'qualquer conteúdo'. Provavelmente, isso não será um problema se for uma implantação limpa. Se você estiver modificando uma implantação pré-existente, precisará fazer algumas coisas extras.

  5. Reescreva os URLs para o conteúdo wp opcional RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L] . Isso vai no seu arquivo .htaccess. Se o usuário tentar acessar algum conteúdo antigo por meio de um wp-contentURL, ele será redirecionado aqui.

  6. Grep e substitua todas as referências ao conteúdo wp no seu banco de dados opcional . Você ainda tem wp-contentem seu banco de dados. Se você deseja liberar o WP, precisa se livrar dessas coisas. Eu exportei / mysql despejei meu banco de dados, fiz uma pesquisa e substitui a wp-contentstring pela nova string. Você pode dizer ... por que tenho que fazer isso se o apache reescrever meus URLs? O problema é que o código fonte conterá essas referências; portanto, se você estiver realmente interessado em obscurecer o WordPress, precisará fazer isso. Nota: Neste ponto, eu deveria ter parado e aceito a realidade de que isso não iria funcionar. Mas eu queria que o Sr. T tivesse pena de mim.

  7. Substitua todas as referências para wp-includese wp-adminna fonte. Muitas das funcionalidades do WordPress dependem desses dois diretórios: wp-includese wp-admin. Isso significa que esses nomes de diretório são codificados no código fonte. Isso significa que você precisaria criar novos diretórios (já que o PHP usa o sistema de arquivos do SO subjacente, não o apache) para acessá-los e, em seguida, ESCREVA-OS no html emitido. Isso é demais. Eu rapidamente desisti e fui ao banheiro para fazer cocô.

Lição

Claro, eu poderia ter lido http://codex.wordpress.org/Hardening_WordPress e seguido essas etapas. Mas eu queria o site perfeito. Agora eu só quero todas aquelas horas de volta. A maior coisa que me impediu de parar foi que eu não li em nenhum lugar na internet que isso era muito trabalho e quase impossível de fazer. Em vez disso, li sobre pessoas tentando fazê-lo sem ter noção de se foram bem-sucedidas ou não. Então, para o meu passado, a quem enviarei isso através do Time Machine da Apple, por favor, não tente ocultar o WordPress. Não vale a pena.

Avery Chan
fonte
Bem, Avery, eu também sou o cara que quer ser perfeito. Primeiro, eu queria criar um multisite wordpress, escondendo o fato de que estou usando o wordpress. Passei por muitos problemas e finalmente desisti da ideia de vários sites. Porque muitos plugins não suportam multisite. Seu sétimo ponto indica que você substituiu wp-includese wp-admintexto manualmente. Tenho certeza de que você navegou em cada arquivo e foi substituído manualmente. Isso porque você perdeu alguns softwares úteis úteis. Por exemplo, você poderia ter tentado grepWin que torna esse trabalho mais fácil
Giri
4

Se você está tentando esconder que está usando o wordpress por causa de crackers, então realmente tem trabalho a fazer. Se você fizer o truque wp *, o que dizer de wp-content e wp-includes? Sem conseguir alcançá-los, você quebrará a página e ela ficará horrível.

Além disso, existem tantas coisas no Wordpress que isso realmente exige algum trabalho - e você provavelmente precisará fazer muito disso novamente quando uma atualização estiver instalada. (Como alguns redirecionamentos no Apache não funcionam)

Se você está apenas tentando esconder do Sr. e da Sra. Todo mundo, é claro que deve conseguir fazer isso de alguma maneira com obscuridade.

Você leu o guia "endurecer Wordpress"? Caso contrário, você deve conferir: http://codex.wordpress.org/Hardening_WordPress Ele fornece uma ótima introdução a muitas coisas que você pode fazer.

Além disso, se você está tão ansioso para esconder o fato de usar o Wordpress, por que usá-lo?

Frands Hansen
fonte
1. Re: wp-content / wp-includes Veja o link no post 2. Eu tenho ler o guia endurecimento WordPress. 3. Sua última pergunta pode ser facilmente respondida lendo o link que eu postei. Não estou tentando ser rude, mas esta questão tem pouco a ver com os méritos técnicos da minha própria pergunta. Muitas pessoas usam ferramentas diferentes, mas não desejam divulgá-lo. Para alguns, é uma decisão de negócios.
Avery Chan
0

Tente fazer sua configuração na configuração do apache. Isso pode ser uma inclusão de arquivo como /etc/wordpress/htaccess. Isso permitirá que você use a Directorydiretiva de configuração. No entanto, você precisará reiniciar o apache para carregar as alterações. Use a reinicialização normal se não desejar interrupções no serviço.

Para restringir o acesso a diretórios com .htaccessarquivos, eles precisam estar nos diretórios apropriados. Eles funcionam como o conteúdo de uma Directorydiretiva de configuração. Pode ser necessário ativar as .htaccessopções necessárias na sua configuração do apache. Esse método não é tão eficiente quanto usar o comando na configuração do apache, pois precisa ser reparado com freqüência.

BillThor
fonte
Estou procurando uma solução que não exija a edição do meu arquivo httpd.conf, porque isso pode ser excedido por escrito (estou em um host virtual privado). Vou editar a pergunta adequadamente.
Avery Chan
@Avry: Você precisará colocar as diretivas que você colocaria na configuração do <Directory> em um .htaccessarquivo no diretório correspondente. Nota: O Apache recomenda que você use a configuração, se possível. Use o controle de versão para se proteger contra substituições.
BillThor