煎饼果子机器爷爷tigertomato 画煎饼果子机器画的时候用的是什么机器

正文 php 全局变量漏洞的点滴分析
php 全局变量漏洞的点滴分析
发布时间: & 编辑:
本文介绍下,在php中全局变量的一个漏洞,有关注php安全的朋友,建议参考学习下。
if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
&exit('Request tainting attempted.');
register_globals 是php中的一个控制选项,可以设置成off或者on ,默认为off,决定是否将 EGPCS(Environment,GET,POST,Cookie,Server)变量注册为全局变量。
如果 register_globals打开的话, 客户端提交的数据中含有GLOBALS变量名, 就会覆盖服务器上的$GLOBALS变量。
所以 这段代码, 就是判断, 如果提交的数据中有GLOBALS变量名, 就终止程序。
由此引起的安全问题成为PHP的&自动全局变量漏洞&,请一定要关掉register_globals选项。并且使用 $_GET, $_POST, $_COOKIE 而非 $_REQUEST 。
Discuz!论坛绕过全局变量防御漏洞
由于php5.3.x版本php.ini的设置中 request_order 默认值为 GP ,导致Discuz! 6.x/7.x中可以绕过全局变量防御。
在include/global.func.php中:
复制代码 代码示例:
function daddslashes($string, $force = 0) {
&&& !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
&&& if(!MAGIC_QUOTES_GPC || $force) {
&&&&&&& if(is_array($string)) {
&&&&&&&&&&& foreach($string as $key =& $val) {
&&&&&&&&&&&&&&& $string[$key] = daddslashes($val, $force);
&&&&&&&&&&& }
&&&&&&& } else {
&&&&&&&&&&& $string = addslashes($string);
&&& return $
include/common.inc.php中:
复制代码 代码示例:
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
&&& foreach($$_request as $_key =& $_value) {
&&&&&&& $_key{0} != '_' && $$_key = daddslashes($_value);
在register_globals=on时通过提交GLOBALS变量就可以绕过上面的代码。
Discuz!中提供的防范方法:
复制代码 代码示例:
if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
&&& exit('Request tainting attempted.');
$_REQUEST超全局变量的值受php.ini中request_order的影响,在最新的php5.3中,request_order默认值为GP,即默认配置下$_REQUEST只包含$_GET和$_POST而不包括$_COOKIE。
借助COOKIE即可提交GLOBALS变量。
临时解决方法:
更改php 5.3.x里的php.ini设置,设置 request_order 为 GPC。
有关php中全局变量的漏洞与临时解决方法,就介绍这些了,希望对大家有所帮助吧。您可能感兴趣的文章:php主程序中可以访问函数中的全局变量
我的图书馆
php主程序中可以访问函数中的全局变量
1.的传递:(1).&值传递:如:$var2=3;&$var1=$var2;echo&$var1;&输出结果是:3;在传递过程中$var2的值被传递给$var1;(2).&传址:如:$var2=3;&$var1=&$var2;echo&$var1;&输出结果是:3;$var2=6;echo&$var1;输出结果是:6;在传递的过程中,$var1接收的是$var2的地址;(这是通过“&”这个符号实现的)。(3).&默认参数。2.变量:&(1).&全局变量:在主程序中可以访问函数中的全局变量,在函数中不可访问主程序中的全局变量,定义是要在前面加global关键字。&(2).&局部变量:在主程序中定义的局部变量只在主程序中有效,在函数中定义的只在函数中有效。&(3).&静态变量:静态变量是一种只能作用于函数范围内的变量(函数外无效),与普通的局部变量不同之处在于他的值不会随着函数的执行完毕而释放,可以通过再次执行函数来改变值,且在定义的时候前面要加上static关键字。&(4).&动态变量:动态变量又称可变变量或变量的变量,可以实现动态的设置和使用一个变量名。如:&&&&&$var=”hello”;&&&&&$$var=”world!”;&&&&&Echo&$var.${$var}.”&br&”;//输出&hello&&&&&&Echo&$var.$//输出hello&3.&常量:&(1).&预定义常量,又称为魔术,它是系统所预定义的,如:_FILE_&&_LINE_PHP_VERSION&&PHP_OS&&E_ERROR等。echo&&_FILE_&;&//输出的是文件的路径。echo&&_LINE_&;//输出的是当前行数。echo&&PHP_VERSION&;//输出的是PHP程序的版本。echo&&PHP_OS&;//输出的是当前使用的系统名;echo&&E_ERROR&;//输出的是最近的错误处;&(2).&自定义常量,自定义常量是用户自己定义的常量,定义的方法是:define(“常量名”,”常量值”);如:define(“myclass”,”503教师”);注:(1).&常量是一种只能通过define()函数定义的不可变的量,前面不用加$符号,可以任何地方定义和访问它,不可以被重新定义或取消定义,常量的值只能是标量,而不能是变量。4.&函数的使用方法:普通调用,函数的镶嵌,函数的递归;5.&类:&(1).&定义类:类可以使用class关键之定义,类名使用驼峰法,如:&&&&&class&Cat{}&(2).&类的组成:属性,方法;&&&&&class&Cat{&&&&&&&&&&&$name=””;//&属性&&&&&&&&&&&$height=””;&&&&&&&&&&&function&jiao()//方法。&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&}&(3).&的关键字:public(公共的,都可调用);&&&&&&&&&&&&&&&&&Private(私有的,只可在类内调用);&&&&&&&&&&&&&&&&&Protected(受限的,可在父内调用,也可在子类中调用);
TA的最新馆藏php:局部变量、全局变量、静态变量 - Java菜鸟平台 - ITeye技术网站
博客分类:
局部变量——用在函数内,作用域就是所在函数
全局变量——在函数外,作用域在整个php文件(包含了 include 和 require 引入的文件),但在函数中不能读到,除非重新申明为global
静态变量——用在函数内,被调用完后,内存不释放,保留最后值,多用来统计累加。
$a 将会在包含文件 b.inc 中生效。
include "b.inc";
//局部变量测试
$s1= "out s1"; //全局变量
function say(){
$s1 = "in s1"; //局部变量
echo "say():$s1";
say(); //输出局部变量: in s1
echo "&br/&";
echo "function out:$s1"; ////输出全局变量:out s1
//static变量测试
function count1(){
echo $num." ";
function count2(){
static $num = 0;
echo $num." ";
for($i=0; $i&10; $i++){
count1(); //11 1 1 1 1 1 1 1 1 1
echo "&br/&";
for($i=0; $i&10; $i++){
count2(); //1 2 3 4 5 6 7 8 9 10
echo "&br/&";
//全局变量在函数中运用,加global
$b = "java";
function show(){
echo $a; // 无输出
global $b;
echo $b; //定义global,输出java
输出3
&?php
function Sum()
global $a, $b;
$b = $a + $b;
echo $b; //3
在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组
function Sum()
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数
function Test()
static $count = 0;
if ($count & 10) {
//$count--;
浏览: 96318 次
来自: 厦门
路过,帮踩踩!
原来一直在使用HWPF哎
什么神仙,我看就是男人写出来的!
在csdn上看过,不过这样女人估计是神仙网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&&>>&正文
PHP全局变量与超级全局变量区别分析
本文分析了PHP全局变量与超级全局变量区别。分享给大家供大家参考,具体如下:
全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a;
超全局变量作用域在所有脚本都有效。所以,在函数可直接使用。比如 $_GET,$_SERVER都是超全局变量。除$_GET,$_POST,$_SERVER,$_COOKIE等之外的超全局变量保存在$GLOBALS数组中。注意,不要误写成$_GLOBALS。有点受到$_POST的影响了。
$GLOBAL是一个特殊的php自定义的数组。超级全局变量。跟$_SERVER一样,都属于超全局变量。
在手册中搜索$GLOBALS 就能查询超全局变量的具体说明和使用方法
变量名就是该数组的索引。 说明:使用$GLOBALS['a']定义一个超全局变量后。可以使用$a直接访问
手册中这样解释的:
$GLOBALS ― References all variables available in global scope 引用所有在全局范围内的可用的变量
结合例子这样理解:假如在函数外面定义了一个变量$a。那么在函数中可用通过$GLOBALS['a']获取到这个变量的值。所以,$GLOBALS数组里面就是:用户定义的所有全局变量。
为什么称它为超级全局变量。对比$_POST,在函数里面可用直接使用。根本不需要使用global语句了。所以$GLOBALS也是这样的原理,只是$_POST保存是post方式传递的变量。$GLOBALS保存的是用户定义的全局变量。
个人理解:
之前对超级全局变量理解不对:超级全局变量在所有脚本下有效,这样表述导致了理解上细微的偏差。如果在所有脚本下有效,那么是不是$GLOBALS保存的超级全局变量,在一个php文件中定义后,在另一个文件中还能获取到。
显然不会是这样的。估计受到了$_POST的影响,因为它好像所有人都能去访问到。没有意识到,你只能访问到当前处理到的$_POST数据。不可能两个人同时提交留言,php文件获取到post的数据怎么区别。这个数据只能是当前线程的。最后,超级全局变量可以这样看,因为它是相对于全局变量而言的。比全局变量更一个层次,全局变量不能作用到函数内部。它就解决了这个问题。在其他语言中,全局变量都能作用到函数内部。php语言设计就不是这样的。
全局变量直接在函数内使用,那么总得提供一种变量能直接使用的吧。就出来了超级全局变量的概念。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:
[][][][][][][][][][]

我要回帖

更多关于 tiger 机器人 的文章

 

随机推荐