使用变量检查是否允许某些事情

时间:2012-03-19 12:37:52

标签: php security variables upload globals

我正在考虑实现在我的网站上打开和关闭某些内容的功能,例如注册和记录。 我可以包含一个包含变量的文件

<?php
$upload = 1;
$register = 1;
?>

然后假设我的register.php文件我可以这样检查

if($register == 1){
//Show form
} else { echo "Registration is disabled" }

我想知道这是否会出现安全问题,因为我在某处读到了可以为url添加内容以带来相同的效果 像这样

register.php?register=1

但如果关闭注册表全局变量,这不起作用,这是一个很大的安全问题吗?

4 个答案:

答案 0 :(得分:2)

NO

register.php?register=1只能从$_GET['register']访问 除非您使用较旧版本的PHP且启用了register_globals 谢谢Lex

如果您在服务器上配置某些功能,我建议您改用会话。

$_SESSION['upload'] = 1;
$_SESSION['register'] = 1;

与常量不同,如果符合某些条件,则可以更改它们。

register_globals()已从最新的PHP 5.4.0中删除,因此,请不要使用它。

答案 1 :(得分:2)

如果您从包含文件中获取这些常量,那么使用常量而不是变量会更好。在任何情况下,都不能在运行时修改常量:

define('UPLOAD', 1);
define('REGISTER', 1);

if (defined('REGISTER') && REGISTER === 1) {
  // Registration disabled
} 

只要关闭register_globals(它应该是!!!!),就无法通过$_GET,$_POST,$_REQUEST中的HTTP请求修改全局变量,除非您通过访问这些变量在代码中明确这样做超全局。

答案 2 :(得分:1)

只要你关闭了register_globals,你就不用担心了。

答案 3 :(得分:1)

关闭整数寄存器,根本不是问题。如果你得到这样的输入,就会出现问题:

$ register = $ _GET ['register'];

并且不要检查您是否确实有一个号码而不是一些恶意代码。