Domanda

Ho ereditato alcuni legacy codice PHP che cosa è stato scritto ai tempi in cui era una pratica standard per utilizzare register_globals (Come PHP 4.2.0, la presente direttiva di default su off, pubblicato il 22.Apr 2002).

Ora sappiamo che è un male per la sicurezza di averlo attivato.Il problema è come faccio a trovare tutti i punti del codice in cui ho bisogno di utilizzare $_GET o $_POST?Il mio unico pensiero è stato quello di impostare la segnalazione alla guardia circa le variabili non inizializzate e poi il test di ogni parte del sito.C'è un modo più semplice?Devo testare ogni percorso di codice nel sito o PHP dare un errore su un file di base?

È stato utile?

Soluzione

Se si imposta segnalazione errori E_ALL, avverte nel log degli errori su variabili non definite completo con il nome del file e il numero di riga (se la registrazione di un file).Tuttavia, viene attivato solo se quando si tratta di tutta una variabile non definita, quindi penso che si andrà a testare ogni percorso di codice.L'esecuzione di php da riga di comando non sembra aiutare, anche.

C'è uno strumento di debug di nome xdebug, non l'ho provato, ma forse può essere utile?

Altri suggerimenti

Ho scritto un script utilizzando il built-in Il Tokenizer funzioni.La sua piuttosto ruvida, ma ha funzionato per il codice di base su cui stavo lavorando.Credo che si potrebbe anche usare CodeSniffer.

Si potrebbe manualmente 'falso' il register globals effetto, ma aggiungere un po ' di sicurezza.(Io in parte preso da osCommerce fork chiamato xoops)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

Se si desidera modificare per rendere il codice più sicuro, almeno aggiungendo globali le variabili di configurazione (come il percorso e url di base) per il cattivo globals elenco.

Si potrebbe anche utilizzarlo per compilare una lista di tutto l'usato get/post variabili per aiutarvi a sostituire tutte le occorrenze di, dire $return_url, con $_REQUEST['return_url];

Io so che c'è un modo per impostare il php.ini valori per lo script con un certo comando, così mi sono andato a cercare e ho trovato anche questo - Goto ultimo post sulla pagina

Anche io ho trovato il seguente post che possono essere di uso - Goto ultimo post sulla pagina

Vorrei aggiungere a questo sempre se nessuno ha trovato una risposta, ma ora devo prendere un treno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top