返回列表 回复 发帖

关于register_globals设置的问题

关于register_globals设置的问题
作者:unknown 更新时间: 2005-03-17
   
  
基于各种各样的理由,PHP 的设置需要依赖于 register_globals
参数打开,但是也成为安全的重要隐患,请看下面的一段代码:
  1. <?php
  2. if (authenticate_user()) {
  3. &#36;authenticated = true;
  4. }
  5. ...
  6. ?>
复制代码
远程用户可以简单的传递 ';authenticated'; 作为表单变量,即使
authenticate_user() 函数返回 false,&#36;authenticated 还是会设置成 true。这是一个简单的例子,你或许会说,我的程序不会这样来写。
而实际上,在稍微复杂一些的应用里面,这个机制就会成为重大的漏洞。
因此,新版本的 PHP ,我们建议用户不要采用这个变量来控制应用,虽然我们没有打算要在不久的将来删除。
为了帮助用户建立 register_globals 设置为 off 的应用,增加了一些变量来代替旧的,下面是7 个新的数组:
&#36;_GET - 包含了通过 GET 发送的表单变量
&#36;_POST - 包含了通过 POST 发送的表单变量
&#36;_COOKIE - 包含了 HTTP cookie 变量
&#36;_SERVER - 包含服务器端变量 (例如:REMOTE_ADDR)
&#36;_ENV - 包含环境变量
&#36;_REQUEST - GET 变量,POST 变量和 Cookie 变量的混合,通过用户而来而不能信任的变量。
&#36;_SESSION - 包含通过会话模块注册的 HTTP 变量
这些变量,在任何范围内,都自动设置为全局变量,可以在任何地方调用,而不需要加 global 关键字。
例如:
  1. function example1()
  2. {
  3. print &#36;_GET["name"]; // 没有必要写成:';global &#36;_GET;';
  4. }
复制代码
另外一个值得一提的小窍门是在 &#36;_SESSION 数组中增加一个记录能自动作为会话变量注册,就像你调用了
session_register() 函数。

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表