电脑通带你了解什么是PHP反序列化安全

  PHP是世界上最好的语言

  曾几何时,这句话也是让php程序员感到一股暖流,但好景不长,随着安全技术的发展及安全意识的提升,越来越多安全漏洞相继爆发出来,比如SQL注入、XSS等高危漏洞可以直接威胁到企业的业务系统,影响极大。

  PHP语法简洁且对编程初学者很友好。同样是一个web开发项目,假如用Java语言写可能需要3个多月,而用PHP写只用一个月就够了。这也就当时人们普遍使用PHP作为网站编程的热点语言语言

  而令人惊讶的是,这些漏洞出现的编程语言大多是PHP。从而就造成人们对PHP的误解,以为这个语言不安全。其实这样理解是有失偏颇的,PHP语言本身是很安全的,只是使用这个语言去写程序的人在编程的时候忽略了安全性才导致出现漏洞的。所以,说PHP语言不安全是不正确的。

  今天以PHP反序列化漏洞为例,简单理解一下PHP编程常见的安全问题。

  php反序列化漏洞又称对象注入。那什么是对象,想和大家普及一下编程的概念:

  类:人

  变量:姓名

  方法:吃饭睡觉打豆豆

  对象:就是对类进行实例化,如小明在睡觉

  PHP反序列化原理

  1.序列化和反序列化

  序列化是将变量转换为可保存或传输的字符串的过程。

  反序列化是在适当的时候把这个字符串再转化成原来的变量使用。

  2.php序列化和反序列化函数

  serialilze:可将变量转换为字符串并且在转换中可以保存当前变量的值。

  unserialize:可以将serialize生成的字符串变换回变量。

  php进行序列化的目的是保存一个对象方便以后重用。

  怎么去发现PHP反序列化漏洞

  在代码审计过程中,先要找一个可控的反序列化函数,通过这个反序列化函数我们去调用一些类,这些类可能会包含一些魔法函数,在这些魔法函数中可能会有一些我们可控的危险操作,从而就触发反序列化漏洞。

  如何产生的反序列化漏洞

  如果一个PHP代码中使用了unserialize函数去调用某一类,该类中会自动执行一些自定义的magic method。这些magic method中如果包含了一些危险的操作或者这些magic method会去调用类中其他带有危险的操作的函数,如果这些危险操作是可控的,那就可以对象注入。

  注:魔法函数是指在php的语法中,有一些系统自带的方法名,这类函数都是以__下划线开头,并在特定的情况下被调用。如__construct() 和 __destruct()、__get() 和 __set()、__isset() 和 __unset()__call() 和 __callStatic()... ... 他们在面向对象编程中起着至关重要的作用。

  所以,PHP代码的安全还是要依赖开发人员自身的安全意识是否足够。

  请将你的笔记本电脑摄像头遮上!因为黑客正在……

  怎样通过一张照片定位他人的地理位置?

  教你三行代码制作文件加密隐藏神器

  举报/反馈