拿这段代码:
<?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'])
为什么我要为我声明变量?
答案 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中删除了这个“功能”
如果您发现它正在与您的管理员联系以将其关闭。