计算机软件

在功能PHP全局变量。 使PHP的全局变量

要创建一个完整的网站,你需要知道很多具有广泛的功能。 但是,什么可以让他真正独一无二的 - 它是PHP。 在编程语言中的全局变量是不是经常使用,但有时知道它是如何工作的,有时是必要的。 这是它是什么,它是如何工作的,我们将在这篇文章中做研究。

范围

所以在其中调用变量和确定的环境。 在大多数情况下,他们只有一个范围。 当PHP全局变量从其它文件加载,那么它可能是包容性(包括)和所需的(要求)。

默认情况下,他们被限制在局部函数范围内。 如何使可变看到文件在其边界,这可能更多使用? 为此,并且在PHP全局变量提供。

关键字“全局”

这里是如何声明一个全局变量到PHP? 在实现这一目标将帮助我们的“全球化”。 这是必要的,你想一个全球性的(narimer,全球«变量“)的变量前面放置。

这样的指示实施后,数据将能够与任何文件中工作。 如果某个地方有这个变量的引用,程序将始终对全球版本的注意。

为什么这么奇怪的语言吗? 事实上,在同一时间有可能是本地版本。 但他们会专供在那里公布这些文件。 而对于所有其余的将采取行动的全局变量的PHP类。 所以你一定要小心。 而且毫无疑问,这里有他们的样子的例子:全球一。

因为如果一个文件将有机会获得一些变数,这将导致他们发生冲突。 但是,我们不能肯定地说 - 局部或全局变量被读取或完全失败。 因此,如果是在一个函数来注册,应该是没有问题的。 但利用其边界的变量是有问题的。 因此,有必要严密监控,确保代码的起草结构无处是那里甚至到了说,冲突的前提条件出现。

记录的另一实施例

是否有可能在PHP创建以另一种方式的全局变量? 是的,连一个也没有。 首先,让我们考虑$ GLOBALS。 这是一个关联数组。 它的关键 - 这个名字。 As的含量的值作为一个全局变量。 应当指出的是,消息公布后阵列中的任何范围存在。 这使人们有理由相信超全局。 它看起来如此:$ GLOBALS [ '变量']。

预定义/超全局

在每一个编程语言也有一些是包租它的一些功能名称。 因此,在PHP中创建全球相同的名称将无法工作的变量。

这种编程语言都有自己的特点。 因此,重要的是,这里的预定义变量不安装“超级”,也就是说,他们并非在所有地区提供。 我怎样才能解决这个问题? 预定义变量是可以在一些局部区域,它必须声明如下:全球«变量” 这似乎是和以前一样叫吧? 这是事实,但并不完全。 让我们来看看已经“打”的例子:

  • 全球$ HTTP_POST_VARS;
  • 回声$ HTTP_POST_VARS [ '名']。

你觉得他们之间有什么区别? 请注意,在PHP的全局变量不一定要在函数中使用。 它甚至可以被放置在被包含在它的文件。

链接和安全

正如你所看到的,在PHP创建一个全局变量是没有问题的。 但是它有什么特别的相对链接? 是的,全球使用时可能会有意外的行为。 但在此之前,有一点背景故事。

在4.2.0版本默认了register_globals指令改变从状态为关闭。 对于大多数用户来说,这不是很重要,但不成功。 毕竟,它直接影响到开发的产品的安全性。 如果您需要使变量全球性的,在这个参数上的PHP指令没有受到直接影响。 但是,不正确的使用已经可以创造先例的安全性。

所以,如果register_globals的开启,前编写的代码的执行初始化需要的是不同的变量,例如发送HTML表单。 因此,我们决定将其关闭。

为什么是这个指令在PHP的全局变量的状态欠多少? 事实是,当开发商的状态并不总是肯定可以自己回答它是从哪里来的问题。 在一方面,它更容易编写代码。 但另一方面 - 这是一个安全隐患。 因此,为了避免错误,以及混合数据和指令已被禁用。

现在,让我们来看看不/安全码,以及如何检测在全局PHP变量的声明在篡改数据是伴随着尝试的情况。 这是必要的,以创建不仅美观,而且还不断的工作没有破解的第一个可用的人的网站。

恶意代码

让我们设置变量是那些谁被授权的情况:

如果(的authenticate_user()){
$授权= TRUE;
}

如果($授权){
包括 “/highly/sensitive/data.php”;
}

在这种状态下,变量可以被自动设定。 考虑到数据可以简单地更换,并且其原籍源没有设置,那么任何人都可以通过这样的测试,假装是别人。 如果需要的话,攻击者(或只是好奇,但没有经验的人)可能被削弱,我们的逻辑。

如果我们改变了指令的值,该代码将正常工作,因为我们需要的。 但是变量的初始化不仅在编程一个很好的基调,也给我们带来了脚本的稳定性有一定的保证。

可靠版本的代码

您可以关闭或工作指令,或规定一个更复杂的代码来实现这一目标。 例如,像这样:

如果(isset($ _ SESSION [ '名'])){

回声 “你好的 {$ _ SESSION [ '用户名']} ”;

}其他{

回声 “你好的旅客
”;
回声“欢迎用户!”

}

在这情况下,替换,会有困难。 不过还是 - 可能。 要做到这一点,你必须采取的是提供了快速反应工具照顾。 如果你想在PHP中的全局变量,你可以使用以下工具:如果我们知道的范围是什么得到的值,就可以注册一个脚本,用火柴进行检查。 当然,这也并不能保证对替代值完全保护。 但是,太多的选择显著复杂化。

查找试图伪装

让我们来看看您了解如何早期写的。 在PHP函数中的全局变量,将在下文中给出,你将需要声明自己。 我们可以说,这是关于课程的话题同化是一种功课。 下面是代码:

<?PHP的
如果(isset($ _ COOKIE [ 'C_COOKIE'])){
} ELSEIF(isset($ _ GET [ 'C_COOKIE'])|| isset($ _ POST [ 'C_COOKIE'])){

电子邮件(“administrarot@example.com”,“注意,脚本记录企图盗窃和篡改数据”,$ _ SERVER [“REMOTE_ADDR”]);
echo“这里是一个破碎的安全或试图这样做通知管理员。”
退出;

}其他{
}
?>

现在,此解释。 天色C_COOKIE来到我们从可靠的来源。 要根据预期的结果完全满意,我们检查它的价值,在出现问题时通知管理员。 如果不来的话没有行动,也没有需要做。 你必须明白,简单地禁用了register_globals指令不会使你的代码是安全的。 因此,从用户接收的脚本的任何变量,应检查的预期值。

结论

在此,一般而言,一切你需要了解全局变量在工作中成功地和安全地使用它们。 当然,说有没有人会使用它们不能了充分的保证 - 攻击者都在不断完善自己的方法和技巧。 因此,希望限制在代码中的最大使用全局变量。 幸运的是,这种编程语言的结构和设计特点可以实现这一目标。 祝你好运!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhcn.delachieve.com. Theme powered by WordPress.