Domanda

Sto lavorando a un'applicazione anni costruiti fa, che ha recentemente smesso di funzionare correttamente. Vecchio programmatore ha detto, che potrebbe accedere variabili $_GET o $_POST senza leggerli da $_GET[] array, ma attraverso la register_globals

Vorrei chiedere: (? Es modi diretti) Quali sono modi diversi per le variabili di accesso $_GET senza l'utilizzo di matrice $_GET[] e, se noto, come posso verificare se questa applicazione utilizza nessuno di loro

?

Grazie in anticipo

Modifica : Gli altri modi che ricordava era register_globals, non magic_quotes. Inoltre, non voglio a usare , ma piuttosto rilevare se è stato utilizzato e, in ultimo aggiornamento del server deprecato (cosa potrebbero spiegare perché app ha smesso di funzionare correttamente)

Modifica : Il mio inglese è orribile oggi. Come ho spiegato in una delle risposte: Ho bisogno di controllare se il programmatore originale usato qualche metodo oscuro e / o deprecato di ottenere variabili da Query stringa in PHP, quindi l'applicazione dei valori ora funziona con sono sbagliata / Non inizializzato

EDIT IMPORTANTE : import_request_variables è fuori dal tavolo, non viene utilizzato. Tutti gli array $_ sono fuori dal tavolo anche, perché ultimo aggiornamento non li avrebbe rotto (=> si lavora ancora). Come posso rilevare quali variabili vengono inizializzati con register_globals?

ANCORA UN ALTRO EDIT : Ho trovato questo:

foreach ($_POST as $k => $v) {
  eval("\$".$k." = '".$v."';");
}
foreach ($_GET as $k => $v) {
  eval("\$".$k." = '".$v."';");
}

Potrebbe essere stato spezzato da una delle ultima aggiornamenti (max. 1 settimana fa)?

È stato utile?

Soluzione

Register Globals e non Magic Quotes ... BTW Register Globals è male puro non di loro (e loro utilizzo sono deprecati dal PHP 5.3.0)!

Modifica Se si vuole verificare se l'applicazione utilizzata Register Globals, prova a cercare i valori $_GET come variabili. Ad esempio, per index.php?id=123 provare a cercare $id nel codice PHP. Se si scopre che questo non significa che lo script utilizza Register Globals ma se $id proviene dal nulla e non viene mai inizializzato / impostato è una buona (male!) Segno che l'applicazione utilizza Register Globals ...

Altri suggerimenti

$_SERVER["QUERY_STRING"] vi darà la stringa GET prima.

Detto, questo suona come un problema che deve essere fissato alla radice, non utilizzando una variabile diversa.

Se magic quotes sono un problema, fare un controllo per se sono abilitati, e trattare con i dati in arrivo di conseguenza.

Disattivazione magici pagina negli spettacoli manuali PHP modo a "fissare" i dati in arrivo a seconda che la funzionalità è attiva o meno. Non è molto efficiente per enormi quantità di dati, ma dovrebbe fare in un compito di tutti i giorni.

Hai anche $ _REQUEST , magic_quotes (deprecato) avrebbe influenzato solo il contenuto delle variabili, non i mezzi per la cattura .

Si veda anche import_request_variables , il codificatore originale può hanno usato per afferrare il contenuto di una variabile GET e inserirlo in un'altra variabile che viene poi fatto riferimento.

Register Globals è una caratteristica orribile che i programmi PHP più anziani spesso si basano su.

Con globali registro accesi, PHP esaminerà le variabili GET e POST e "promuovere" loro di nomi di variabili normali -. Ad es $_GET['myvar'] sarebbe accessibile nel codice come $myvar

Tra l'altro, questo rende il programma molto facile per gli hacker per rompere semplicemente indovinare ciò che gli altri nomi di variabili il programmatore possono essere utilizzati. La funzionalità globali di registro è stato pertanto disattivato per impostazione predefinita per un lungo periodo di tempo, è ora ufficialmente deprecato, e verrà rimosso tutto in una versione futura.

Poiché le variabili utilizzate in questo modo si fa riferimento in un modo che è indistinguibile da variabili normali, significa che il tentativo di aggiornare vecchio codice che utilizza il registro globali possono essere molto difficile. Lo fa dipenderà molto da come ben scritto il codice è.

Il problema è probabilmente di PHP register_globals . Questa opzione fa $_GET['some_var'] o la loro versione $_POST equivalente disponibile come $some_var automaticamente. Questo è deprecato e non si deve assolutamente usare, ma l'altro programmatore potrebbe averli utilizzati in tale applicazione.

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