php序列化

PHP字符逃逸导致的对象注入详解

只谈情不闲聊 提交于 2019-12-27 04:00:40
1.漏洞产生原因: 序列化的字符串在经过过滤函数不正确的处理而导致对象注入,目前看到都是因为过滤函数放在了serialize函数之后,要是放在序列化之前应该就不会产生这个问题 <?php function filter ( $string ) { $a = str_replace ( 'x' , 'zz' , $string ) ; return $a ; } $username = "tr1ple" ; $password = "aaaaax" ; $user = array ( $username , $password ) ; echo ( serialize ( $user ) ) ; echo "\n" ; $r = filter ( serialize ( $user ) ) ; echo ( $r ) ; echo "\n" ; var_dump ( unserialize ( $r ) ) ; $a = 'a:2:{i:0;s:6:"tr1ple";i:1;s:5:"aaaaa";}i:1;s:5:"aaaaa";' ; var_dump ( unserialize ( $a ) ) ; php特性: 1.PHP 在反序列化时,底层代码是以 ; 作为字段的分隔,以 } 作为结尾(字符串除外),并且是根据长度判断内容的 2.对类中不存在的属性也会进行反序列化

python基础知识学习第八天

白昼怎懂夜的黑 提交于 2019-12-26 04:19:51
面向对象编程OOP 面向对象 对象的概念是面向对象技术的核心。在现实世界里,我们面对的所有事物都是对象,如计算机、电视机、自行车等。在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。 面向对象的三个主要特性: 对象的行为:可以对对象施加哪些操作;如电视机的开、关、转换频道等。 对象的状态:当施加那些方法时,对象如何响应;如电视机的外形、尺寸、颜色等; 对象的标识:如何区分具有相同行为与状态的不同对象。 基本概念: 对象,所谓数据封装就是将一组数据与这组数据有关操作组装在一起,形成一个实体,这个实体就是对象。 类(Class)具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。 成员:对象的状态和行为。 属性:对象的状态,一个对象用数据值来描述它的状态。 方法:对象的行为,用于改变对象的状态,对象及其操作就是对象的行为 成员 属性 方法 常量 魔术方法 构造 析构 __clone __toString __call 继承: 一个对象拥有或者使用另一个对象的成员信息,称之为这个对象继承自另一个对象。 Php中,通过在类上,使用特殊的操作达到目的。 通过在定义类时,利用 extends 来指明当前类对象继承那个类的对象! 重写override 集成时,如果发生成员冲突,php的处理方式,为重写。就是子类同名成员会覆盖父类同名成员

PHP学习资源整理

戏子无情 提交于 2019-12-14 12:05:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 学习资源 PHP相关的有参考价值的社区,博客,网站,文章,书籍,视频等资源 PHP网站(PHP Websites) PHP The Right Way 一个PHP实践的快速参考指导 PHP书籍(PHP Books) Modern PHP – 作者是 PHP 之道 的发起人和 Slim框架 的作者 Modern PHP(中文版) 依赖管理( Dependency Management ) 用于依赖管理的包和框架 Composer / Packagist – 一个包和依赖管理器. Composer Installers – 一个多框架Composer库安装器 pickle – PHP扩展安装器 Melody – A tool to build one file Composer scripts. 框架( Frameworks ) Web开发框架 Symfony2 – 由独立组件构成的框架(SP2) Zend Framework 2 – 同样是由独立组件构成的框架(ZF2) Laravel 5 – 简洁优雅的PHP Web开发框架(L5) Aura PHP – 独立组件的框架 Yii2 – 用于开发大型Web应用的高性能PHP框架 Nette – 同样是由独立组件构成的框架 PPI Framework 2 –

【PHP】高级面试题之十万个为什么?(二)

一曲冷凌霜 提交于 2019-12-09 06:32:37
成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。 1、处理PHP数组,foreach和for那个效率更高?效率高的原因是什么呢? 答:foreach的效率更高,因为foreach走的是链表的遍历,详细解释请查看另外一篇文章“for和foreach那个效率更高?原因是什么?” for和foreach那个效率更高? 2、PHP数组底层采用的是循环链表,正向、反向遍历数组都很方便是否正确呢? 答:这个说话是错误的,php数组是双向链表,故而可以正向、反向遍历数组 什么是链表呢? 链表是一种经常被使用的一种数据结构。链表中的每一个元素都至少有两个元素,一个指向它的下一个元素,一个用来存放它自己的数据——>我们称之为单项链表,缺点是每次查询都需要从开始位置开始一次像下找。 后来加了一个元素指向前一个元素,这样我们不管知道链表中哪一个元素,我们都能正向、反向的查到所有的元素(php数组就是这样)——>双向链表 3、PHP数组插入和删除操作的时间复杂度都是O(1)? 答:我们可以用一个整数来当作下标去数组中取出我们想要的数据,就像var_dump()的实现中通过args[i]来获取参数并把它传递给php_var_dump()函数那样。使用数组最大的好处便是速度!读写都可以在O(1)内完成,因为它每个元素的大小都是一致的,只要知道下标,便可以瞬间计算出其对应的元素在内存中的位置

PHP字符逃逸导致的对象注入

别来无恙 提交于 2019-12-05 21:53:22
1.漏洞产生原因: 序列化的字符串在经过过滤函数不正确的处理而导致对象注入,目前看到都是因为过滤函数放在了serialize函数之后,要是放在序列化之前应该就不会产生这个问题 ?php function filter($string){ $a = str_replace('x','zz',$string); return $a; } $username = "tr1ple"; $password = "aaaaax"; $user = array($username, $password); echo(serialize($user)); echo "\n"; $r = filter(serialize($user)); echo($r); echo "\n"; var_dump(unserialize($r)); $a='a:2:{i:0;s:6:"tr1ple";i:1;s:5:"aaaaa";}i:1;s:5:"aaaaa";'; var_dump(unserialize($a)); php特性: 1.PHP 在反序列化时,底层代码是以 ; 作为字段的分隔,以 } 作为结尾(字符串除外),并且是根据长度判断内容的 2.对类中不存在的属性也会进行反序列化 以上代码就明显存在一个问题,即从序列化后的字符串中明显可以看到经过filter函数以后s:6对应的字符串明显变长了

PHP字符逃逸导致的对象注入

独自空忆成欢 提交于 2019-12-05 09:02:06
1.漏洞产生原因: 序列化的字符串在经过过滤函数不正确的处理而导致对象注入,目前看到都是因为过滤函数放在了serialize函数之后,要是放在序列化之前应该就不会产生这个问题 ?php function filter($string){ $a = str_replace('x','zz',$string); return $a; } $username = "tr1ple"; $password = "aaaaax"; $user = array($username, $password); echo(serialize($user)); echo "\n"; $r = filter(serialize($user)); echo($r); echo "\n"; var_dump(unserialize($r)); $a='a:2:{i:0;s:6:"tr1ple";i:1;s:5:"aaaaa";}i:1;s:5:"aaaaa";'; var_dump(unserialize($a)); php特性: 1.PHP 在反序列化时,底层代码是以 ; 作为字段的分隔,以 } 作为结尾(字符串除外),并且是根据长度判断内容的 2.对类中不存在的属性也会进行反序列化 以上代码就明显存在一个问题,即从序列化后的字符串中明显可以看到经过filter函数以后s:6对应的字符串明显变长了

PHP serialize & JSON 解析

倾然丶 夕夏残阳落幕 提交于 2019-12-04 13:30:04
对于JSON(JavaScript Object Notation)大家应该不陌生,它是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为 对象(object) ,纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。 PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式, 说起来两者都是以一种字符串的方式来体现一种数据结构,那它们之间有什么区别呢。

php常用函数

守給你的承諾、 提交于 2019-12-04 05:56:24
字符串函数 strlen:获取字符串长度,字节长度 substr_count 某字符串出现的次数 substr:字符串截取,获取字符串(按照字节进行截取) mb_strlenmb_substr strchr:与substr相似,从指定位置截取一直到最后 strrchr(获取文件后缀名):与strchr一样,只是从右边开始查找字符 strtolower:所有的字符都小写(针对英文字母) strtoupper:所有的字符都大写 strrev:字符串反转(只能反转英文:英文存储只有一个字节),按照字节进行反转 strpos:从字符串中找对应字符出现的位置(数字下标),从最左边开始找 strrpos:与strpos一样,只是从字符串的右边开始找 trim:去掉函数两边的字符,默认是空格 str_split 函数把字符串分割到数组中。 chunk_split() 函数把字符串分割为一连串更小的部分 str_repeat("Shanghai",5);把字符串 "Shanghai " 重复 5 次 str_replace('\\', '/', dirname(__DIR__))); 替换 ucfirst 首字母大写 2时间日期函数 time:得到当前时间的时间戳(整型:从格林威治时间1970年1月1日0时0分0秒开始)秒数 date:时间序列化函数,将指定的时间戳转换成规定时间日期的显示格式

php的serialize和unserialize的用法

前提是你 提交于 2019-12-03 09:45:58
serialize -- 产生一个可存储的值的表示 描述 string serialize ( mixed value ) serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。 这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。 想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。 serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。 当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。 类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。 注意: 在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制,可以同时存储属性和方法。请参见类与对象中的序列化对象部分获取更多信息。 unserialize (PHP 3 >= 3.0.5, PHP 4, PHP 5) unserialize -- 从已存储的表示中创建 PHP 的值 描述 mixed unserialize ( string str [, string

PHP常用函数大全

梦想的初衷 提交于 2019-12-02 18:58:28
字符串函数 strlen:获取字符串长度,字节长度 substr_count 某字符串出现的次数 substr:字符串截取,获取字符串(按照字节进行截取) mb_strlenmb_substr strchr:与substr相似,从指定位置截取一直到最后 strrchr(获取文件后缀名):与strchr一样,只是从右边开始查找字符 strtolower:所有的字符都小写(针对英文字母) strtoupper:所有的字符都大写 strrev:字符串反转(只能反转英文:英文存储只有一个字节),按照字节进行反转 strpos:从字符串中找对应字符出现的位置(数字下标),从最左边开始找 strrpos:与strpos一样,只是从字符串的右边开始找 trim:去掉函数两边的字符,默认是空格 str_split 函数把字符串分割到数组中。 chunk_split() 函数把字符串分割为一连串更小的部分 str_repeat("Shanghai",5);把字符串 "Shanghai " 重复 5 次 str_replace('\\', '/', dirname(__DIR__))); 替换 ucfirst 首字母大写 时间日期函数 time:得到当前时间的时间戳(整型:从格林威治时间1970年1月1日0时0分0秒开始)秒数 date:时间序列化函数,将指定的时间戳转换成规定时间日期的显示格式