__wakeup()漏洞:
__wakeup触发于unserilize()调用之前,但是如果被反序列化的字符串其中对应的对象的属性个数发生变化时,会导致反序列化失败而同时使得__wakeup失效。
(漏洞影响的版本 PHP5<5.6.25/PHP<7.0.10)
__toString()函数
当要输出对象的时候,一般是要用print_r或者var_dump来打印,用echo会报错,可以说是不能将对象转化为string,如果在类定义了__toString方法,就可以在测试时用echo打印,打印的对象就会自动调用它所属类定义的__toString方法,格式化输出这个对象所包含的数据。
该方法大多数在写类的时候使用。
session机制
Session一般称为“会话控制“,简单来说就是是一种客户与网站/服务器更为安全的对话方式。一旦开启了 session 会话,便可以在网站的任何页面使用或保持这个会话,从而让访问者与网站之间建立了一种“对话”机制。
- php session机制:
php session可以看作是一个特殊的变量,用于存储关于用户会话的信息,或者更改用户会话的设置;php session变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的,其对应的具体session值会存储于服务器端(cookie存储在用户本地终端),安全性较高。
- php session工作流程:
当开始一个会话时,PHP会尝试从请求中查找会话ID,如果发现请求的cookie,get中不存在session id,PHP就会自动调用php_session_create_id函数创建一个新的会话,并且在http response中通过set-cookie头部发送给客户端保存;
有时候浏览器用户会禁止cookie,此时php也可以将session id添加到url参数中以及form的hidden字段中(需要将php.ini中的session.use_trans_sid设为开启,也可以在运行时调用ini_set来设置);
会话开启之后php就会将会话中的数据设置到$_SESSION变量中,php停止时,它会自动读取变量中的内容,并将其序列化,然后发给会话保存管理器保存。
默认情况下,php使用内置的文件会话保存管理器来完成session的保存,也可以通过配置项session.save_handler来修改所要采用的hi话保存管理器,会话保存管理器会将会话数据保存到配置项session.save_path所指定的位置。