PHP:GET数据自动声明为变量

时间:2008-09-19 13:34:54

标签: php url get

拿这段代码:

<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
}

if ($action) {
    echo $action;
}
else { 
    echo 'No variable';
}
?>

然后使用?action = test访问该文件 是否有任何方法可以防止GET自动声明$ action?除了当然添加

&& !isset($_GET['action'])

为什么我要为我声明变量?

6 个答案:

答案 0 :(得分:27)

检查php.ini中的register_globals设置。它可能会开启,你想要它。

  

为什么我要为我声明变量?

You don't.这是一个可怕的安全风险。它使环境,GET,POST,Cookie和服务器变量全局(PHP manual)。这些是PHP中的少数reserved variables

答案 1 :(得分:4)

看起来你的php.ini中的register_globals是罪魁祸首。你应该关闭它。拥有它也是一个巨大的安全风险。

如果您在共享主机上并且无法修改php.ini,则可以使用ini_set()关闭register_globals。

答案 2 :(得分:2)

如果我理解你的问题,请将register_globals设置为off。 见http://us2.php.net/manual/en/language.variables.predefined.php

答案 3 :(得分:2)

如果您无法访问 php.ini ,则php脚本中的ini_set('register_globals', false)将无效(变量已经声明) 一个 .htacces s:

php_flag register_globals Off

有时可以提供帮助。

答案 4 :(得分:1)

您可以通过将PHP.INI中的PHP日志级别转换为

来测试是否正确声明了所有变量
error_reporting  =  E_ALL 

您的代码段现在应生成通知。

答案 5 :(得分:1)

在php的历史中,他们做出了有争议的决定,默认关闭register_globals,因为这是一个巨大的安全隐患。它让任何人都有可能在你的代码中注入变量,造成不可想象的后果!甚至在php6中删除了这个“功能”

如果您发现它正在与您的管理员联系以将其关闭。