Waarom beginnen de meeste van de Joomla! PHP bestanden met "defined(' JEXEC')"?

From Joomla! Documentation

This page is a translated version of the page Why do most of the Joomla! PHP files start with defined(' JEXEC')? and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français • ‎العربية • ‎中文(台灣)‎

Deze pagina documenteert de _JEXEC controle die gebruikt wordt om veel PHP-bestanden te beschermen, uitlegt waarom hij gebruikt wordt, wanneer hij gebruikt moet worden en omstandigheden waarom het niet te gebruiken. Zie ook: Waarom beginnen de meeste Joomla! PHP bestande met defined(' JEXEC')?

Wat?

De volgende regel is meestal te vinden aan het begin van Joomla! PHP-bestanden:

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

Waarom?

_JEXEC is een constante die normaal is gedefinieerd in het index.php-bestand in de root van de Joomla! installatie en wordt om een veilig entry point in Joomla! te krijgen. Het gedefinieerde or die controle zorgt ervoor dat _JEXEC wordt gedefinieerd in het pad om naar het bestand te komen. Dit wordt gebruik om ervoor te zorgen dat een bestand padinformatie kan vrijgeven omdat functies, variabelen of klassen die niet gedefinieerd zijn in dat bestand de PHP-foutrapportage kunnen veroorzaken en het pad blootstellen.
Het voorkomt ook dat per ongeluk injecteren van variabelen door een aanval op register globals die het PHP-bestand doet denken dat het in een applicatie zit terwijl dit niet het geval is.

Het instellen van een lager fout rapportage zou een soortgelijk effect geven, maar er zijn configuraties waarin het wijzigen van de PHP INI-instellingen niet zijn toegestaan. De JEXEC-controle werkt ongeacht of de configuratie kan gewijzigd worden of niet, en ze heeft geen andere bijwerkingen (bijv. een lage foutrapportage moet je op een bepaald punt deze verhogen om de foutmelding te zien, en moet je deze nadien terug verlagen).

Wanneer?

De controle moet worden toegevoegd aan bestanden die, wanneer ze benaderd worden, direct het pad blootstellen. Bijvoorbeeld, de volgende fouttreedt op wanneer de Backlink System plugin (/plugins/system/backlink.php-bestand) de _JEXEC controle heeft uitgeschakeld:

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

Zoals aangetoond bestaat de 'jimport' niet wanneer het bestand direct aangesproken wordt dus PHP genereert een fout en legt het pad naar het bestand bloot. Het toevoegen van defined or die controle naar dit bestand zal een Restricted acces bericht veroorzaken wanneer het bestand wordt geraadpleegd.

De algemene regel voor de JEXEC controle is als het PHP-bestand afhankelijk is van een ander bestand om goed te werken. Meestal wordt bij het direct benaderen van een bestand zonder de JEXEC controle een PHP-foutmelding veroorzaakt (aangenomen dat de PHP error reporting op standaard fouten weergeven ingesteld staat) over het missen van een variabele, functie, object of vergelijkbare wanneer het bestand beveiligd moet worden.

Sommige bestanden hoeven niet te worden beschermd tegen deze controle. Dit kunnen bestanden zijn die geen externe afhankelijkheden (bv. een simpele klasse of een stukje code) of het kunnen externe bestanden zijn die kunnen werken zonder in de Joomla! installatie te zitten. Voorbeeld hiervan is TinyMCE GZipped javascriptgenerator die op zich zelf staan.