Java类加载机制
Java程序在运行前需要先编译成class文件,Java类初始化的时候会调用java.lang.ClassLoader加载类字节码,ClassLoader会调用JVM的native方法(defineClass0/1/2)来定义一个java.lang.Class实例。
class文件Java字节码类文件(.class)是Java编译器编译Java源文件(.java)产生的“目标文件”。它是一种8位字节的二进制流文件。
Java类加载机制主要作用:Java类文件的加载进内存
Bootstrap ClassLoader(引导类加载器)
Extension ClassLoader(扩展类加载器)
App ClassLoader(系统类加载器)—默认的类加载器
ClassLoader.getSystemClassLoader()返回的系统类加载器也是AppClassLoader,见示例。
12345678910111213@Test public void test5() throws ClassNotFoundException { ClassLoader l ...
JavaAgent
JDK1.5 开始引入了 Agent 机制 (即启动 java 程序时添加 -javaagent 参数”, 如 java -javaagent:/data/test.jar LingXeTest),Java Agent 机制允许用户在 JVM 加载 class 文件的时候先加载自己编写的 Agent 文件,通过修改 JVM 传入的字节码来实现注入 RASP 防御逻辑。这种方式因为必须是在容器启动时添加 jvm 参数,所以需要重启 Web 容器。JDK1.6 新增了 attach 方式 (agentmain),可以对运行中的 java 进程附加 agent。使用附加的方式可以在容器运行时动态的注入 RASP 防御逻辑。
JavaIAST概念比较
概念
描述
备注
SAST
静态应用程序安全测试,在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。
白盒测试
DAST
动态应用程序安全测试,模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从而确定该 Web 应用是否易受攻击。
黑盒测试
IAST
交互式应用程序安全测试 ...
Java反射机制
Reflection(反射)被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
反射机制提供的功能
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的成员变量和方法
生成动态代理
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射应用创建一个person类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051package com.drop.test;public class Person { public String name; private int age; public Person() { super(); } public Person(String name) ...
maven
Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven存在意义
项目庞大,不适合使用package来划分模块,借助于Maven将一个项目拆分成多个工程。
原本jar需要复制到WEB-INF/lib工程臃肿,借助于Maven将jar包保存在”仓库”中,有需要”引用”文件接口。
一个jar包依赖的其他jar包需要手动加入项目,借助于Maven将被依赖的jar包导入进来。
运行时环境:其实是jar包的引用,并没有把jar包复制进工程。
四大特性依赖管理系统在Java中可以用groupId,artifactId,version组成Coordination(坐标)唯一标识一个依赖。
123456<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactI ...
python常用方法脚本
base64base64编码导成二进制文件123456789101112import base64import binasciiclzBytecodeBase64Str = "xxx"newstr = base64.b64decode(clzBytecodeBase64Str)print(type(newstr))with open('somefile.bin', 'wb') as f: f.write(newstr)print("输出成功")
后台扫描1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071# -*- coding:utf-8 -*-import urllibimport timeimport threadingurl = raw_input("输入你要扫描的网址: ...
Servlet
开始卷java了,先写一下在IDEA部署Servlet的两种方法吧,一种导包,一种用maven,然后记录自己学习的过程吧。
IDEA部署Servlet导servlet-api.jar包部署新建java项目添加框架支持:
添加web框架
项目目录架构
目录
描述
.idea
IDEA工程配置文件
src
存放Java代码
web
存放项目资源
WEB-INF
存放项目配置文件,Jar包、class文件
WebProject.iml
模块配置文件
External Libraries
外部Jar文件
手工导入servlet-api.jar文件在WEB-INF文件夹下新建lib文件夹将tomcat中的servlet-api.jar复制进去
然后对文件进行项目集成,右键lib
编写Servlet创建MyServlet,实现Servlet接口,重写5个方法
配置web.xml文件1234567891011121314151617<?xml version="1.0" encoding="UTF-8"?> ...