Vale a pena restringir o acesso direto a arquivos de temas?


31

De vez em quando, deparei com o seguinte snippet em temas:

if ( ! defined('ABSPATH')) exit('restricted access');

Está no início de alguns (todos?) Arquivos PHP em um tema e deve impedir o acesso direto ao arquivo por fontes nefastas.

Vejo que isso não está incluído no Twenty Ten or Eleven e nunca o vi recomendado na documentação oficial do WordPress. Parece uma boa ideia para mim, mas também não sei o suficiente sobre segurança para julgar e não consigo encontrar muito com o Google.

Isso é algo que eu deveria ter em meus temas personalizados? Se sim, deveria estar em todos os arquivos PHP ou apenas em alguns?


7
Apenas para leitores mais tarde, isso pode ser escrito mais curto e mais agradável:defined('ABSPATH') OR exit;
kaiser

ou até mais curto:: defined('WPINC') ? : die();P
Tim Elsass

Também me pergunto se vale a pena colocar algum código como este apenas para evitar ver os erros do PHP sobre funções indefinidas nos meus logs de erros. Os bots parecem gostar de acessar esses arquivos diretamente às vezes e eu recebo erros como 'Chamada para a função indefinida query_posts ()' porque o bootstrap do WP não foi carregado
Matt Keys

Respostas:


26

Normalmente, você não precisa disso. Mas ... há pelo menos um caso extremo:

  • Se um arquivo de tema fizer parte do modelo ,
  • e está usando variáveis ​​globais do contexto de chamada (arquivo pai),
  • e register_globals é on,
  • e é só usar essas variáveis ​​sem nenhuma verificação de segurança ...

… Um invasor pode chamar esse arquivo, definir as variáveis ​​ausentes com GETou POSTe fazer com que o arquivo de tema as imprima. E depois há é um problema de segurança.

Então ... a melhor opção não é uma verificação de contexto como a do seu exemplo, mas um bom código: evite variáveis ​​globais, verifique seu conteúdo antes de imprimi-lo.

Em alguns casos, adiciono a verificação de contexto quando penso que outra pessoa usará meu código e o alterará sem ter em mente a segurança. Não dói.


Se uma parte do modelo ainda contivesse pelo menos uma chamada de função que causaria um erro fatal do PHP, esse cenário ainda seria possível?
Chris_O

@ Chris_O Depende da ordem de aparência.
fuxia

Faz sentido e concorda totalmente com outro motivo para não usar variáveis ​​globais entre chamadas de arquivo.
Chris_O

1
É sempre melhor prevenir do que remediar. Muita segurança não pode prejudicar, pode?
21812 Sean Sean Berg

2
Se você fizer tudo certo, não deverá usar código desnecessário. Esta questão é a prova de que torna o código mais difícil de seguir.
fuxia
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.