首页 > 作文

PHP安全之register

更新时间:2023-04-08 21:41:21 阅读: 评论:0

一、register_globals=off和regis复式条形统计图ter_globals=on的区别

register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过来的参数.

register_globals的值可以设置为:on或者off,我们举一段代码来分别描述它们的不同。

<form action='' method='get'><input type='text' name='urname' value='alex' ><input type='submit' name='sub' value='sub'></form><?phpecho 过期啤酒能喝吗'urname::',$urname;echo '<br>sub::',$sub;echo '<br>get::';print_r($_get);?>

当register_globals=on的时候,程序运行提交输出结果为:

urname::alex
sub::sub
array ( [urname] => alex [sub] => sub )

当register_globals=off的时候,程序运行提交输出结果为:

urname::
sub::
array ( [urname] => alex [sub] => sub )

通过测试结果,显而易见:register_globals的意思就是注册为全局变量,所以当on的时候,传递过来的值会被直接的注册为全局变量直接使用,而off的时候,我们需要到特定的数组里去得到它。

二、为什么推荐register_globals=off?

1.php4.2.0版开始配置文件中register_globals的默认值从on改为off了,虽然你可以设置它为on,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用off的风格开始编程。

2.当register_globals打开以后,各种变量都被注入代码,例如来自html表单的请求变量。再加上php在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。但是register_globals的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。例子来源手册

<?php   // 当用户合法的时候,赋值   $authorized = true    if (authenticated_ur()) {   $authorized=true;   }    // 由于并没有事先把 $authorized 初始化为 fal,   // 当 register_globals 打开时,可能通过get auth.php?authorized=1 来定义该变量值   // 所以任何人都可以绕过身份验证   if ($authorized) {   include"/highly/nsitive/data.php";   }   ?>

当 register_globals = on 的时候,上面的代码就会有危险了。如果是 off,$authorized 就不能通过如 黄河边的英雄故事url 请求等方式来改变,这样就好多了,尽管初始化变量是一个良好的编程习惯。比如说,如果在上面的代码执行之前加入 $authorized = fal 的话,无论 register_globals 是 on 还是 off 都可以,因为用户状态被初始化为未经认证。

三、如果需要在一台关闭了 register_globals 的共享主机上运行一ambition是什么意思些旧式程序而该程序需要此选项打开时怎么办?

本例模拟 register_globals on。如果改变了配置文件中的 variables_order 选项,则考虑对 $superglobals 作出相应的改动。

<?php// emulate register_globals on   if (!ini_get('register_globals')) {   $superglobals= array($_rver,$_env,$_files,$_cookie,$_post,$_get);   if (ist($_ssion)) {   array_unshift($superglobals,$_ssion);   }   foreach ($superglobals as $superglobal) {   extra阿良良木历ct($superglobal,extr_skip);   }   }   ?>

四、如果需要在一些打开了register_globals选项的主机上但想消除安全隐患,该怎么办?

本例模拟 register_globals off。要记住此代码应在脚本最开头的地方调用。如果使用了会话机制,则在 ssion_start() 之后调用。

<?php// emulate register_globals off   functionun register_globals(){   if (!ini_get('register_globals')) {   return;   }   // might want to change this perhaps to a nicer error   if (ist($_request['globals']) || ist($_files['globals'])) {   die('globals overwrite attempt detected');   }   // variables that shouldn't be unt   $nount= array('globals','_get','_post','_cookie','_request','_rver','_env','_files');   $input=array_merge($_get,$_post,$_cookie,$_rver,$_env,$_files,ist($_ssion) &&is_array($_ssion) ?$_ssion: array());   foreach ($input as $k=>$v) {   if (!in_array($k,$nount) && ist($globals[$k])) {   unt($globals[$k]);    }   }   }    unregister_globals();   ?>

到此这篇关于php安全之register_globals的on和off的区别的文章就介绍到这了,更多相关php安全 register_globals内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-08 21:41:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/c94485d52a9efcc44e062c7b0ddd7176.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP安全之register.doc

本文 PDF 下载地址:PHP安全之register.pdf

标签:变量   代码   程序   选项
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图