2013-01-01 15 views
6

Recentemente sono stato navigando un po 'di codice sorgente PHP, in particolare quelli del software forum come phpBB e esotalkphp - sicurezza del sito Web utilizzando la variabile globale

ho notato una cosa, la maggior parte di loro utilizza una variabile globale all'inizio del loro pagina come una sorta di sicurezza in questo modo:

if (!defined("IN_ESOTALK")) exit; //For esotalk 
if (!defined("IN_PHPBB")) exit; //FOR phpbb 

Che tipo di sicurezza è questa? Non capisco. Potresti spiegarmi cosa impedisce e come?

grazie, Vidhu

+2

Questo per impedire l'accesso allo script dall'esterno dell'applicazione – SaidbakR

risposta

7

funziona facendo in modo lo script php non viene eseguito a meno che il quadro si è avviato. In questo modo l'utente non può eseguire uno script senza passare attraverso la pagina corretta.

Ecco un esempio. Abbiamo 2 file:

index.php

<?php 
    define("_MY_FRAMEWORK", 1); 
    echo 'started'; 
    require('script.php'); 
?> 

e script.php

<?php 
    if (!defined("_MY_FRAMEWORK")) exit; 
    echo "my script"; 
?> 

Se si esegue script.php direttamente, non succederà nulla perché _MY_FRAMEWORK non è stato definito. uscirà.

Tuttavia, se si esegue index.php, che include script.php, lo script continuerà perché è stato definito prima _MY_FRAMEWORK. Otterrai l'output completo: started seguito da my script.

@Gumbo fa un buon punto: se non hai visto definire prima, definisce una costante che non può essere modificata. Il user contributions to the PHP documentation può essere utile per capire come funziona.

+2

È necessario ricordare che si tratta di costanti e non di variabili. – Gumbo

1

Ciò impedisce anche la manipolazione delle variabili utilizzando register_globals.

Se register_globals è abilitato in php.ini, gli utenti sono in grado di modificare le variabili nello script modificando la variabile nell'URL, ma ciò non consentirebbe loro di modificare il valore delle variabili costanti che sono state definite utilizzando la funzione define

1

Queste sono le costanti globali. Con questi si assicurano che il loro software stia funzionando come previsto.