¿Vale la pena restringir el acceso directo a los archivos de temas?

31

Me he encontrado con el siguiente fragmento de temas de vez en cuando:

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

Está al principio de algunos (¿todos?) Archivos PHP en un tema y se supone que impide el acceso directo al archivo por parte de fuentes nefastas.

Veo que esto no está incluido en Twenty Ten u Eleven y nunca lo he visto recomendado en la documentación oficial de WordPress. Me parece una buena idea, pero tampoco sé lo suficiente sobre seguridad para juzgarlo y no puedo encontrar mucho con Google.

¿Es esto algo que debería tener en mis temas personalizados? Si es así, ¿debería estar en todos los archivos PHP o solo en algunos?

mrwweb
fuente
77
Solo para lectores posteriores, esto puede escribirse más corto y mejor:defined('ABSPATH') OR exit;
kaiser
o incluso más corto: defined('WPINC') ? : die();P
Tim Elsass
También me pregunto si vale la pena poner un código como este solo para evitar ver los errores de PHP sobre funciones indefinidas en mis registros de errores. A los bots parece que les gusta golpear directamente estos archivos a veces y recibo errores como 'Llamar a la función indefinida query_posts ()' porque el arranque WP no se ha cargado
Matt Keys

Respuestas:

26

Por lo general, no lo necesitas. Pero ... hay al menos un caso límite:

  • Si un archivo de tema es una parte de la plantilla ,
  • y está usando variables globales del contexto de llamada (archivo padre),
  • y register_globals es on,
  • y solo está usando estas variables sin ningún control de seguridad ...

… Un atacante puede llamar a este archivo, establecer las variables que faltan con GETo POSTy hacer que el archivo del tema las imprima. Y entonces no es un problema de seguridad.

Entonces ... la mejor opción no es una verificación de contexto como la de su ejemplo, sino un buen código: evite las variables globales, verifique su contenido antes de imprimirlo.

En algunos casos, agrego la verificación de contexto cuando creo que alguien más usará mi código y lo cambiará sin tener en cuenta la seguridad. No duele

fuxia
fuente
Si una parte de la plantilla aún contuviera al menos una llamada de función que causaría un error fatal de PHP, ¿sería posible este escenario?
Chris_O
@Chris_O Depende del orden de aparición.
fuxia
Tiene sentido y totalmente de acuerdo en otra razón para no usar variables globales entre las llamadas de archivo.
Chris_O
1
Siempre es mejor prevenir que curar. Demasiada seguridad no puede hacer daño, ¿verdad?
Sean Berg
2
Si hace todo bien, no debe usar código que no sea necesario. Esta pregunta es la prueba de que hace que el código sea más difícil de seguir.
fuxia