当前位置: 首页 > news >正文

北京的网站建设收费标准广推科技(北京)有限公司

北京的网站建设收费标准,广推科技(北京)有限公司,大网站如何优化,靖江网站制作多少钱作者#xff1a;Eason_LYC 悲观者预言失败#xff0c;十言九中。 乐观者创造奇迹#xff0c;一次即可。 一个人的价值#xff0c;在于他所拥有的。可以不学无术#xff0c;但不能一无所有#xff01; 技术领域#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的… 作者Eason_LYC 悲观者预言失败十言九中。 乐观者创造奇迹一次即可。 一个人的价值在于他所拥有的。可以不学无术但不能一无所有 技术领域WEB安全、网络攻防 关注WEB安全、网络攻防。我的专栏文章知识点全面细致逻辑清晰、结合实战让你在学习路上事半功倍少走弯路 个人社区极乐世界-技术至上 追求技术至上这是我们理想中的极乐世界~关注我即可加入社区 本专栏CTF基础入门系列打破以往CTF速成或就题论题模式。采用系统讲解基础知识入门题目练习真题讲解方式。让刚接触CTF的读者真正掌握CTF中各类型知识点为后续自学或快速刷题备赛打下坚实的基础~ 目前ctf比赛一般选择php作为首选语言如读者不了解php的基本语法请登录相关网站自学下基本语法即可一般5-7天即可掌握基础。 目录1. 什么是PHP序列化和反序列化1.1 基础概念1.2 基础知识1.3 PHP反序列化漏洞的危害1.4 PHP反序列化漏洞的防御措施2. 知识点讲解2.1 类的访问修饰符2.1.1 public 公开的2.1.2 protected 受保护的2.1.3 private 私有的2.2. 相关函数和重要知识点2.2.1 基础定义2.2.2 相关函数及技巧知识点serialize(mixed $value)unserialize(string $str): mixed2.2.3 【技巧】urlencode 序列化结果2.2.4 【技巧】序列化引用R类型绕过比对2.2.5 PHP反序列化特点3. PHP常用魔术方法3.1 魔法函数汇总3.2 魔法函数使用示例1. 什么是PHP序列化和反序列化 1.1 基础概念 PHP序列化是将一个PHP对象转换成一个字符串以便在不同的应用程序之间传递和存储。反序列化是将序列化的字符串转换回PHP对象。攻击者可以通过构造恶意的序列化字符串来触发代码执行这就是PHP反序列化漏洞的本质。PHP序列化函数官方文档https://www.php.net/manual/en/function.serialize.phpPHP反序列化函数官方文档https://www.php.net/manual/en/function.unserialize.php 1.2 基础知识 序列化是将 PHP 对象转换为可存储或传输的字符串的过程。序列化后的字符串可以保存到文件或通过网络传输到其他计算机在需要时可以反序列化为原始对象。 序列化的基本原理是将 PHP 对象转换为一组字符串其中包含对象的属性和变量。序列化后的字符串可以被反序列化为原始对象从而重新创建对象。 PHP 序列化可以使用 PHP 内置的 serialize() 函数进行。例如以下代码将一个 PHP 对象序列化为字符串 $object new MyClass(); $string serialize($object);在上面的代码中$object 是一个 MyClass 类的实例serialize() 函数将其序列化为一个字符串存储在 $string 变量中。 反序列化可以使用 PHP 内置的 unserialize() 函数进行。例如以下代码将一个序列化的字符串反序列化为 PHP 对象 $string O:7:MyClass:2:{s:3:foo;s:3:bar;s:3:baz;i:123;}; $object unserialize($string);在上面的代码中$string 是一个序列化的字符串unserialize() 函数将其反序列化为一个 MyClass 类的实例存储在 $object 变量中。 需要注意的是PHP 序列化只能序列化 PHP 对象不能序列化资源、闭包等其他类型的数据。另外由于序列化后的字符串包含对象的私有属性和方法因此在反序列化时需要确保对象的类定义已经加载到内存中。 简单来说就是将一个php对象转化为字符串保存序列化方便传输到远端后在远端再还原成对象的一个过程反序列化。 1.3 PHP反序列化漏洞的危害 PHP反序列化漏洞可以导致远程代码执行攻击者可以通过构造恶意的序列化字符串将任意代码注入到应用程序中从而实现控制服务器的目的。 简单说就是构造恶意的字符串序列化这样远端还原对象时反序列化就把恶意的对象还原并执行了。 1.4 PHP反序列化漏洞的防御措施 防御PHP反序列化漏洞的方法有多种其中最重要的是对用户输入进行过滤和验证。此外还可以使用PHP内置的序列化函数进行序列化和反序列化而不是使用第三方库。 2. 知识点讲解 首先我们先看一个完整的PHP序列化和反序列化的代码 CTF中往往会直接给出代码需要分析代码编制恶意字符串 2.1 类的访问修饰符 上图中定义了一个类Tree,类中前三行分别出现了public、private、protected,分别是什么意思呢下面我们就来详细介绍下~· 类内部是指类定义的内部即类名后大括号{ }内部。类外部是指类定义的外部内容即类名后大括号{}之外的所有地方。类成员的访问权限控制分为内部访问(私有的private)。内部访问(受保护protected)和全部访问(公有public)。 2.1.1 public 公开的 公开的属性或函数可在类内部、外部访问 public $nameBMW public function XXX{} 2.1.2 protected 受保护的 受保护的属性或函数只能在类及其子类、父类间内部访问。若想在外部访问需要设置引用方法。 protected $colorblue 2.1.3 private 私有的 私有的属性或函数只能在当前类的内部访问若想在外部访问需要设置引用方法。 比如上图中最后三个echo的调用如下图可以看到public可以正常调用其余两个产生报错 2.2. 相关函数和重要知识点 2.2.1 基础定义 序列化的目的是方便对象的传输和存储。 序列化 指将一个实例化的对象从一个实例转换为一个简短的序列化字符串这样便于保存对象可以将序列化字节存储到数据库或者文本当中。 反序列化 是当需要的时候再通过反序列化将序列化字符串解析获取保存的对象直接调用而不需要重新实例化一个类 在PHP应用中序列化和反序列化一般用做缓存比如session缓存cookie等 2.2.2 相关函数及技巧知识点 serialize(mixed $value) 参数为需要序列化的对象、数组、字符串等。返回值类型为字符串即序列化字符串。 unserialize(string $str): mixed 参数类型为字符串也就是序列化字符串。返回值为反序列化得到的对象、数组、字符串等。 ?php class Car{public $nameBMW;protected $colorblue;private $sizelarge;private $price;function __construct(){echo 序列化时调用构造方法br;}function __destruct(){echo 反序列化时调用析构函数br;}function show(){echo $this-name.br;echo $this-color.br;echo $this-size.br;echo price:.$this-price.br;} }$myCar new Car(); $o serialize($myCar); print_r($o); print_r(\n); print_r(urlencode($o)); print_r(\n);$un_o unserialize(urlencode($o)); print_r($un_o);?// 序列化时调用构造方法 // O:3:Car:4:{s:4:name;s:3:BMW;s:8:*color;s:4:blue;s:9:Carsize;s:5:large;s:10:Carprice;N;} // O%3A3%3A%22Car%22%3A4%3A%7Bs%3A4%3A%22name%22%3Bs%3A3%3A%22BMW%22%3Bs%3A8%3A%22%00%2A%00color%22%3Bs%3A4%3A%22blue%22%3Bs%3A9%3A%22%00Car%00size%22%3Bs%3A5%3A%22large%22%3Bs%3A10%3A%22%00Car%00price%22%3BN%3B%7D// 反序列化时调用析构函数这段代码定义了一个名为Car的类包含公共属性$name、受保护属性$color、私有属性$size和未定义初始值的私有属性$price以及构造函数__construct()和析构函数__destruct()和一个公共方法show()用于输出属性的值。 在代码中首先创建了一个Car类的实例$myCar并将其序列化为字符串$o然后打印输出$o和$o的URL编码形式。 $oO:3:Car:4:{s:4:name;s:3:BMW;s:8:*color;s:4:blue;s:9:Carsize;s:5:large;s:10:Carprice;N;} urlencode($o) O%3A3%3A%22Car%22%3A4%3A%7Bs%3A4%3A%22name%22%3Bs%3A3%3A%22BMW%22%3Bs%3A8%3A%22%00%2A%00color%22%3Bs%3A4%3A%22blue%22%3Bs%3A9%3A%22%00Car%00size%22%3Bs%3A5%3A%22large%22%3Bs%3A10%3A%22%00Car%00price%22%3BN%3B%7D接着将URL编码后的字符串$o反序列化为一个新的对象$un_o并打印输出$un_o。 在输出的过程中构造函数__construct()被调用输出序列化时调用构造方法而析构函数__destruct()在反序列化时被调用输出反序列化时调用析构函数。在调用show()方法时只有公共属性$name和受保护属性$color被输出而私有属性$size的值无法输出。 PHP序列化字符串的格式如下: 对象类型:长度:“类名”:类中变量的个数:{类型:长度:“值”;类型:长度:“值”;......} 这里的长度是指字符串长度 o表示对象a表示数组s表示字符i表示数字 2.2.3 【技巧】urlencode 序列化结果 %00为空字符占位1位。正常浏览器不会显示但是在urlencode下会显示private在序列化后会出现%00*%00%00*%00colorprotected在序列化后出现 %00类名%00变量名%00Car%00size 为避免浏览器不显示空字段导致反序列化不成功使用序列化时采用url编码 $o urlencode(serialize($myCar)) 2.2.4 【技巧】序列化引用R类型绕过比对 序列化的时候可以通R类型值来保存变量的引⽤指针状态。 上述含义为input值引用correct值的结果。保持key[correct] key[input] 2.2.5 PHP反序列化特点 PHP在序列化保存类对象状态时只保存其中的变量和类名等并不会保存序列化时类的结构不保存方法。在反序列化时其实就是将序列化字符串中存储的变量带入到当前上下文环境中寻找到的类去重新实例化对象。 3. PHP常用魔术方法 3.1 魔法函数汇总 在面向对象编程中PHP 提供了一系列的魔术方法这些魔术方法为编程提供了很多便利在 PHP 中的作用是非常重要的。PHP 中的魔术方法通常以__两个下划线开始并且不需要显式的调用而是在某种特定条件下自动调用的。上文中介绍的构造函数 __construct() 在实例化对象时调用析构函数__destruct()在销毁对象时自动调用。常用魔术方法如下 __construct() // 构造函数在实例化对象时调用 __destruct() // 析构函数在销毁对象时调用 __call(string $function_name, array $arguments) // 在对象中调用一个不可访问或不存在的方法时被调用 __callStatic() // 用静态方式中调用一个不可访问方法时调用 __get($name) // 获取对象不存在的属性或无法访问的属性时调用.$name表示要获取的属性名 __set($name, $value) // 设置对象不存在的属性或无法访问的属性时调用.$name表示要设置的属性名,$value表示要设置的值 __isset() // 当对不可访问属性调用isset()或empty()时调用 __unset() // 当对不可访问属性调用unset()时被调用 __sleep() // 执行serialize()时先会调用这个函数 __wakeup() // 执行unserialize()时先会调用这个函数 __toString() // 类被当成字符串时的回应方法 echo $obj; __invoke() // 以调用函数的方式调用一个对象时的回应方法 $person(); __set_state() // 调用var_export()导出类时此静态方法会被调用 __clone() // 当对象复制完成时调用 __autoload() // 尝试加载未定义的类 __debugInfo() // 打印所需调试信息反序列化时会默认调用的方法有 __destruct()__wakeup() 魔法函数介绍推荐文章 PHP之十六个魔术方法详细介绍 PHP魔法方法/函数详解 3.2 魔法函数使用示例 下面这段代码初学时也许看不明白但其实含金量非常高后续做题中这个表要反复查看的~ ?php # 设置⼀个类A class A{private $name AS1def;function __construct(){echo __construct() call\n;}function __destruct(){echo \n__destruct() call\n;}function __toString(){return __toString() call\n;}function __sleep(){echo __sleep() call\n;return array(name);}function __wakeup(){echo __wakeup() call\n;}function __get($a){echo __get() call\n;return $this-name;}function __set($property, $value){ echo \n__set() call\n;$this-$property $value;}function __invoke(){echo __invoke() call\n;} } //调⽤ __construct() $a new A(); //调⽤ __toSting() echo $a; //调⽤ __sleep() $b serialize($a); echo $b; //调⽤ __wakeup() $c unserialize($b); echo $c; //不存在这个abcd属性调⽤ __get() echo $a-abcd; //name是私有变量不允许修改调⽤ __set() $a-name pro; echo $a-name; //将对象作为函数调⽤ __invoke() $a(); //程序结束调⽤ __destruct() (会调⽤两次__destruct因为中间有⼀次反序列化)输出结果如下 __construct() call __toString() call __sleep() call O:1:A:1:{s:7:Aname;s:6:AS1def;}__wakeup() call __toString() call __get() call AS1def __set() call __get() call pro__invoke() call__destruct() call__destruct() call以上就是PHP反序列化的基础知识下一篇文章就在这些基础知识上开始题目的练习~
http://www.tj-hxxt.cn/news/130398.html

相关文章:

  • 做生意在哪个网站做如何分析网站建设
  • 清华大学有关网站建设的书做哪个网站零售最好
  • 可做长图的网站织梦如何做中英文网站
  • 优秀的字体设计网站自建域名
  • 中恒诚信建设有限公司网站360街景地图最新版
  • 大型网站架设需要考虑哪些问题淘宝怎么做引流和推广
  • 做网站电话说辞怎么买到精准客户的电话
  • 滁州做网站的公司微信分销系统有哪些平台
  • 机关网站建设和运行情况汇报电子商务网站建设的难点
  • 网站源码商城网站服务公司有哪些
  • 开题报告旅游网站开发3d建模需要什么学历
  • 决定网站打开的速度吗网站被做站公司贩卖
  • 甘肃机械化建设工程有限公司网站赣州章贡区哪里要招工
  • 网站收录大量下降一个网站建设的课程设计书
  • 招聘网站设计论文网站开发团队投入
  • 在线视频网站开发wordpress超链接颜色
  • 公司对比网站济南软件开发外包公司
  • wordpress 图片比例廊坊seo优化排名
  • 新手建立企业网站流程网站开发主管招聘
  • 手机做网站服务器吗建网站做外贸
  • 营销型企业网站建设方案松江专业做网站公司
  • 招聘网站制作公司wordpress如何关闭标签功能
  • 溧阳住房和城乡建设局网站微信看视频打赏网站建设
  • 做网站具体流程公司做的局域网网站怎么登陆
  • 怎样做网站关键词优化江苏建设监理协会官方网站
  • 基于asp.net网站开发做学校网站素材
  • html5 可以做网站吗刷外链工具
  • seo网站推广怎样wordpress主题seo模板
  • 深圳网站建设与制作公司网络推广方案案例
  • 自己做视频网站资源从哪里来wordpress公告栏插件