JEXEC

From Joomla! Documentation

This page is a translated version of the page JEXEC and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎Nederlands • ‎中文(台灣)‎
Copyedit.png
This Article Needs Your Help

This article is tagged because it NEEDS REVIEW. You can help the Joomla! Documentation Wiki by contributing to it.
More pages that need help similar to this one are here. NOTE-If you feel the need is satistified, please remove this notice.


Esta página documenta la verificación _JEXEC que se utiliza para proteger los archivos PHP, explicando por qué se usa, cuándo usarlo y situaciones donde no debería utilizarse. Mira también: ¿Por qué la mayoría de los archivos PHP de Joomla! se inician con define(' JEXEC')...?

¿Qué?

La siguiente línea se encuentra comúnmente en el inicio de los archivos PHP de Joomla!:

defined('_JEXEC') or die('Restricted access');

¿Por qué?

_JEXEC es una constante que se define normalmente en el archivo index.php en la raíz de la instancia de Joomla! y se utiliza para marcar un punto de entrada seguro a Joomla. La verificación defined o die asegura que _JEXEC ha sido definido en el camino para llegar al archivo. Esto se utiliza para asegurarse que un archivo que podría exponer información de la ruta de acceso debido a funciones, variables o clases no está definido en el archivo de informes de errores de PHP y exponer una ruta de acceso.
También evita la inyección accidental de variables a través de un ataque a register globals impidiendo que el archivo PHP suponga que esta dentro de la aplicación cuando realmente no lo es.

Configurar los informes de errores tendría un efecto similar, sin embargo hay configuraciones en las que el cambio de configuración no están permitidos en PHP.INI. La verificación de JEXEC funciona independientemente de si la configuración se puede cambiar y no tiene otros efectos secundarios (por ejemplo, si estás depurando tener que reducir cada archivo al generar un informe de error sería molesto, porque tendrías que establecer un indicador de depuración para detenerlo o después de cada archivo se incluye restablecer el informe de error y eso ¡no es divertido!).

¿Cuando?

El control debe ser añadido a los archivos cuando se accede a causa de la directa exposición de una ruta. Por ejemplo, el siguiente error se produce cuando el plugin del Sistema Backlink (/plugins/system/backlink.php archivo) ha tenido deshabilitada la verificación _JEXEC:

Fatal error: Call to undefined function jimport() in /Users/pasamio/Sites/workspace/joomla_15/plugins/system/backlink.php on line 18

Como se evidente, la función 'jimport' no existe cuando el archivo es llamado directamente por PHP generando un error y expone la ruta de acceso al archivo. Agrega la verificación defined o día a este archivo causa un mensaje de "Acceso Restringido" que se muestra cuando se accede al archivo.

Así que la regla general es hacer la verificación JEXEC si el archivo PHP depende de otro archivo para que funcione correctamente. Por lo general, si tienes acceso a un archivo directamente sin la verificación JEXEC y un error PHP es elevado (suponiendo que tu informes de errores PHP está configurado, de forma predeterminada, para mostrar los errores) sobre la ausencia de una variable, función, objeto o similares, entonces, el archivo debe ser protegido.

Algunos archivos no necesitan ser protegidos de esta verificación. Podrían ser archivos sin dependencias externas (por ejemplo, una simple clase o trozos de código) o pueden ser archivos externos que pueden operar sin estar dentro de Joomla!. Ejemplos de esto incluyen el generador Javascript GZip de TinyMCE, el cual es totalmente autónomo.