0

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

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

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

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

我想知道这是否是一个安全问题,因为我在某处读到的东西可以在 url 后缀以带来相同的效果,就像这样

register.php?register=1

但是,如果关闭全局寄存器,这将不起作用,这是一个安全问题吗?

4

4 回答 4

2

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

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

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

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

于 2012-03-19T12:40:21.653 回答
2

register.php?register=1$_GET['register'] 除非您使用的是旧版本的 PHP 并打开了 register_globals ,否则只能从这里访问谢谢 Lex

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

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

与常量不同,如果满足某些条件,它们可以更改。

并且register_globals()从最新的 PHP 5.4.0 中删除,所以,不要使用它。

于 2012-03-19T12:39:36.677 回答
1

只要您关闭了 register_globals,您就不必担心它。

于 2012-03-19T12:40:31.513 回答
1

关闭寄存器全局变量,这根本不是问题。如果您收到这样的输入,就会出现问题:

$register = $_GET['register'];

并且不要检查你是否真的得到了一个数字而不是一些恶意代码。

于 2012-03-19T12:41:01.903 回答