数组概念了解PHP 中数组的概念
掌握数组的创建方法
数组概述学生信息1234567891011$name = "xiu";$sex = true;$age = 18;$score = 99.9;$stu1 = $name;$stu1 = $sex;$stu1 = $age;$stu1 = $score;var_dump($stu1);
把学生信心存储在一个变量里,需要用数组来实现。
123456789101112$name = "xiu";$sex = true;$age = 18;$score = 99.9;$stu1[] = $name;$stu1[] = $sex;$stu1[] = $age;$stu1[] = $score;echo "<pre>";var_dump($stu1);
数组特点键值对(key-value);
键,key,存储数组中,变量的“编号”。
值,value,存储数组中,变量的值。
数组中的元素可以是任意类型的数据对象。
索引数组,变量的“编号”是整数,整数不具 ...
初识PHP
了解PHP 语言
PHP 语言标记123456789<h1>My Name is XIU!</h1><script> console.log("This message is from info.php!")</script><?php // PHP 的开始标记,表示从此标记开始,进入PHP 模式。 phpinfo(); // PHP 代码 // PHP 的结束标记,表示从开始标记到结束标记,之间的内容是PHP 模式 // 之后的内容依然被PHP 解释引擎认为是纯文本字符串。?>
说明:
在PHP 文件中,可以与HTML 和JavaScript 混编。
开始标记<?php 表示进入PHP 模式,结束标记?>,标识退出PHP 模式。
PHP 模式之外的内容会被作为字符输出到浏览器中。
HTML 或JavaScript 对于PHP 来说就是纯文本字符串。
1234567$str=< ...
麻省理工学院对Kerberos协议的诞生有过一个生动有趣的故事,这个故事方便我们理解为什么Kerberos协议要设计成现在的这种认证模式,详细内容见上一篇
背景1、个人文件还是公司文件以及服务都存在于一台系统上,所有人都要去一台机器办公,效率非常低,为每个人分配了电脑以后就需要考虑安全问题
2、如何让服务器正确识别每一个人,假定所有数据包在传输过程中都可以被任意截取和修改
3、在每一台电脑上都存入所有人的账户密码是不现实的,所以引入一个认证服务统一管理所有的用户密码
4、假设用户访问邮件服务,认证服务让你提供密码以此来证明身份,它把你提供的密码和数据库中的密码相比较,通过认证,认证服务不会提供给你任何密码,不然下次你就可以不认证直接利用密码登录,认证服务会给你一张票,拿到票后,你把此票给邮件服务,以此来证明你的身份
5、需要解决的问题,每次使用还没有得到票的服务前,都必须给认证密码。比如使用邮件服务,就要输入一次。使用文件服务,又要输入一次。打印服务,还要输入一次,并且网络中明文传输密码。不法分子就可以监听网络流量获取密码。
6、引入”票据授权”服务(TGS),TGS将代替认证服务的发 ...
Designing an Authentication System:
a Dialogue in Four Scenes
版权所有1988,1997麻省理工学院。版权所有
原作者Bill Bryant,1988年2月。
由Theodore Ts’o转换为HTML格式,1997年2月。在后记中添加了Kerberos V5的改动。
摘要 这段对话将不断完善和优化一个叫”Charon”的网络系统。随着对话的推进,人物雅典娜和欧里庇得斯将一步步发现这个系统存在的安全问题。当每个安全问题出现时,他们将采取不同的应对方案。在对话的最后,他们成功创建出了一个安全可靠的系统。
最终,雅典娜将此系统命名成”Kerbeors“,巧合的是,麻省理工学院的Athena项目设计的认证系统也是这个名称。1988年冬季在德克萨斯州达拉斯举行的 USENIX 大会上提出的Kerberos:一个网络认证系统,与此对话中的”Kerberos”系统有着惊人的相似之处。
目录 ● 人物简介 ● 第一幕 ● 第二幕 ● 第三幕 ● 第四幕
人物简介 雅典娜 前途无量的系统开发工程 ...
web渗透
未读JAVA反序列化漏洞类继承1234567891011121314151617181920212223242526public class Person { public int age; public String name; public void talk(){ System.out.println("Person 说话了"); }}public class Student extends Person{ public int score; public void talk(){ System.out.println("Student 说话了"); }}public class Test { public static void main(String[] args) { Student stu1 = new Student(); stu1. ...
序列化与反序列化seriallization 序列化 : 将对象转化为便于传输的格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。
deseriallization 反序列化:将序列化的数据恢复为对象的过程。
漏洞成因不管是PHP的反序列化漏洞还是JAVA的反序列化漏洞都基于一定的前提
比如java反序列化漏洞大名鼎鼎的cc链就需要服务端使用存在漏洞的commoncollections版本,并且jdk也要对
客户端可以控制序列化的对象传入服务端的readObject()方法,大多数的服务端应用都会重写这个方法,当服务端启用某些出名的组件时,我们也可以看到这些组件的代码,当组件中存在可以执行任意代码的代码块,假设为A,我们可以分析这块代码块在组件运行中被哪些对象B调用,找到B以后找调用B的C,直到找到接受我们序列化对象的readObject()方法调用,在对象中填入相关参数,满足这一系列的调用条件,形成链子
PHP反序列化serialize(); 将对象序列化成字符串
unserialize(); 将字符串反序列化回对象
序列化对象转换成字符串
方 ...
编程语言
未读强烈推荐视频
1https://www.bilibili.com/video/BV16h411z7o9?p=4&vd_source=b2266581304ec9fed75badf10a27c9dd
双亲委派ClassLoader(类加载器)
Java源代码被编译器编译成**.class**的字节码文件。然后由我们得ClassLoader负责将这些class文件给加载到JVM中去执行
Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。
ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。
AppClassLoader:主要负责加载应用程序的主函数类
原理当一个Hello.class这样的文件要被加载时。不考虑我们自定义类加载器,首先会在AppClassLoader中检查是否加载过,如果有那就无需再加载了。如果没有,那么会拿到父加载器,然后调用父加载器的loadClass方法。父类中同理也会先检查自己是否已经加载 ...
注意区分类加载和加载阶段的区别:
类加载:指整个类加载过程,包括:加载阶段、链接阶段、初始化阶段。
加载阶段:指类的加载过程中的一个阶段(加载阶段)。
类生命周期加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,任何类都有且仅有一个自己的class对象,也就是我们反射获取的那个class对象。
类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器
1、从本地文件系统加载class文件,这是绝大部分程序的类加载方式。2、从JAR包加载class文件,这种方式也是很常见的,JDBC编程时用到的数据库驱动类就放在JAR文件中,JVM可以从JAR文件中直接加载该class文件。3、通过网络加载class文件。4、把一个Java源文件动态编译,并执行加载
链接分为验证、准备和解析三步,在链接的准备阶段会为类的静态变量分配内存,并设置默认初始值,例如代码中一个静态变量private static ...
编程语言
未读代理模式代理模式是设计模式之一,我们通常通过new一个对象然后调用其对应的方法来访问我们需要的服务。代理模式则是通过创建代理类(proxy)的方式来访问服务,代理类通常会持有一个委托类对象,代理类不会自己实现真正服务,而是通过调用委托类对象的相关方法,来提供服务,所以其实我们调用的还是委托类的服务,但是中间隔了一个代理类。这么做的好处是我们可以在访问服务之前或者之后加一下我们需要的操作,而这些操作与原本的服务关联性不大,我们如果直接写到原本的服务中会增加代码的复杂性,是不合理的
静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类
123public interface Person { public void rentHouse();//创建一个person接口,这个接口就是租客和中介的公共接口,这个接口有一个rentHouse()方法}
123456public class Renter implements Person{ @Override public void rentHo ...
编程语言
未读概念反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构
实例化对象–>getClass()–>完整的类
反射就是操作Class对象
获取class对象的三种方式一个加载的类在 JVM 中只会有一个Class实例,通过Class可以完整地得到一个类中的所有被加载的结构
12345678910111213import test.Student;public class Test { public static void main(String[] args) throws ClassNotFoundException { Class<?> s1 = Class.forName("test.Student");//通过Class.forName加完整的包名获取 Cl ...