PHP: Get-dados automaticamente de ser declaradas como variáveis
Pergunta
Tome este código:
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
E, em seguida, acessar o arquivo com? Action = test Existe alguma maneira de prevenir $ action sejam automaticamente declarado pelo GET? À excepção, claro, adicionando
&& !isset($_GET['action'])
Por que eu iria querer a variável a ser declarada por mim?
Solução
Verifique se o seu php.ini para a definição register_globals
. É, provavelmente, você deseja-lo.
Por que eu iria querer a variável a ser declarada por mim?
Você não. É um risco de segurança horrível. Faz Meio Ambiente, GET, POST, Cookie e variáveis ??globais do servidor (Manual do PHP) . Estes são um punhado de variáveis ??reservadas em PHP.
Outras dicas
Looks como register_globals
no seu php.ini é o culpado. Você deve desligar isso. É também um enorme risco de segurança para tê-lo.
Se você estiver em hospedagem compartilhada e não pode modificar php.ini, você pode usar ini_set () para ligar register_globals off.
Definir register_globals para fora, se eu estou entendendo sua pergunta. Consulte http://us2.php.net/manual/en/language .variables.predefined.php
Se você não tem acesso ao php.ini , um ini_set('register_globals', false)
no script php não funcionará (variáveis ??já são declarados)
Um Htacces S com:
php_flag register_globals Off
pode, por vezes ajuda.
Você pode testar, se todas as variáveis ??são declaradas corretamente, girando o nível log PHP em PHP.INI para
error_reporting = E_ALL
O trecho de código agora deve gerar um aviso.
Em algum momento na história do php eles tomaram a decisão controversa para desligar register_globals por padrão, pois foi um enorme risco de segurança. Ele dá a todos o potencial de variáveis ??injetar em seu código, criar consequências inimagináveis! Este "recurso" é ainda removido em PHP6
Se você perceber que ele está em contato com o administrador para desligá-lo.