PHP: i dati GET vengono automaticamente dichiarati come variabili
Domanda
Prendi questo codice:
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
E quindi accedi al file con? action = test Esiste un modo per impedire che $ action venga automaticamente dichiarata dal GET? Oltre ovviamente ad aggiungere
&& !isset($_GET['action'])
Perché dovrei voler dichiarare la variabile per me?
Soluzione
Controlla php.ini per l'impostazione register_globals
. Probabilmente è acceso, lo vuoi spegnere.
Perché dovrei voler dichiarare la variabile per me?
No. È un orribile rischio per la sicurezza. Rende globali le variabili Environment, GET, POST, Cookie e Server (Manuale di PHP) . Queste sono alcune variabili riservate in PHP.
Altri suggerimenti
Sembra che register_globals
nel tuo php.ini sia il colpevole. Dovresti disattivarlo. È anche un enorme rischio per la sicurezza averlo.
Se utilizzi l'hosting condiviso e non riesci a modificare php.ini, puoi utilizzare ini_set () per disattivare register_globals.
Disattiva register_globals su off, se capisco la tua domanda. Vedi http://us2.php.net/manual/en/language .variables.predefined.php
se non si ha accesso a php.ini , un ini_set('register_globals', false)
nello script php non funzionerà (le variabili sono già state dichiarate)
Un .htacces s con:
php_flag register_globals Off
a volte può aiutare.
Puoi verificare se tutte le variabili sono dichiarate correttamente girando il livello di log di PHP in PHP.INI su
error_reporting = E_ALL
Il tuo frammento di codice ora dovrebbe generare un AVVISO.
Ad un certo punto della storia di php hanno preso la controversa decisione di disattivare register_globals di default in quanto si trattava di un enorme rischio per la sicurezza. Dà a chiunque il potenziale di iniettare variabili nel tuo codice, creare conseguenze impensabili! Questa & Quot; caratteristica & Quot; viene persino rimosso in php6
Se noti che è attivo, contatta il tuo amministratore per disattivarlo.