Java基础八 - HTTP相关/Cookie/Session/网络攻击

一、 反射/序列化/拷贝

1. 反射

java 复制代码
//反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
//在Yaml数据驱动自动化框架比较适用,能获取到当前的类名及方法名
import java.lang.reflect.*;

public class ReflectionExample {
    public static void main(String[] args) throws Exception {
        // 获取当前类的 Class 对象
        Class<?> currentClass = ReflectionExample.class;

        // 获取当前方法的 Method 对象
        Method currentMethod = currentClass.getDeclaredMethod("main", String[].class);

        // 获取类名和方法名
        String className = currentClass.getName();
        String methodName = currentMethod.getName();

        System.out.println("当前类名:" + className);
        System.out.println("当前方法名:" + methodName);
    }
}

2. 序列化

java 复制代码
序列化是指将一个对象抓换为字节流在网络上传输到服务器,服务器对其进行反序列化
可以使用 Serializable 接口来标记一个类可以被序列化

3. 动态代理

java 复制代码
Java 动态代理是一种在运行时生成代理类的机制,
允许你在不事先知道具体代理类的情况下创建代理对象。
动态代理通常用于在代理模式中,通过代理对象来控制对实际对象的访问,
并可以在代理的前后添加一些额外的逻辑。


动态代理的用途包括:

日志记录:在方法调用前后添加日志记录。
性能监控:统计方法调用的耗时。
事务管理:在方法调用前后开启、提交或回滚事务。
权限控制:在方法调用前检查用户权限。
缓存控制:在方法调用前从缓存中获取数据,或在方法调用后将结果缓存起来。

4. 深拷贝和浅拷贝

java 复制代码
1. 浅拷贝
只复制了对象的引用地址,2个引用指向同一个内存地址,在其中一个变化后,另一个的也会同时变化。
2. 深拷贝
既复制了内存地址,也复制了引用地址;变化不会影响其他

二、Http相关

1. Session与Cookie

java 复制代码
1. Session存储在服务端,Cookie存储在用户本地浏览器
2. Session更加安全,cookie可能会存在被篡改的风险
3. Session存储比较大的数据,而Cookie相对比较小,不超过4kb
java 复制代码
Session的工作原理:存储在服务器的Session可以理解是一个Map。
Session是key,里面还有其他用户信息是value。
用户请求的时候拿Cookie包装了sessionID换取其他信息

2. 如何避免sql注入

java 复制代码
攻击原理:在浏览器通过伪造,注入一段sql达到查询/修改数据库,达到攻击目的
避免:
1. 使用参数化查询
2. 对输入的内容进行(正则/字符串)过滤
3. 使用 Web 应用防火墙(WAF)来检测和阻止恶意 SQL 注入攻击。

3. XSS(跨站脚本攻击)

java 复制代码
原理:用户在浏览网页的时候,通过Xss注入HTML代码,当用户浏览或者输入某些内容的时候自动调用,
从而获取当前网页用户的消息
避免:对输入/URL进行过滤,对输出进行编码。

4. CSRF( 跨站网站攻击**)**

java 复制代码
原理:
给用户提供和目标网站类似的网站/放置恶意链接,用户在登录状态下点击某功能。
导致调用链其他链接,例如:修改密码,转账等

避免:
1. 敏感操作短信验证码
2. CSRF  token
    1). CSRF Token 是一种用于防止 CSRF 攻击的机制。网站会在用户登录后,为用户生成一个随机的 CSRF Token,并将其存储在用户的会话中或者通过 Cookie 返回给用户。
    2). 在进行敏感操作(如修改密码、更改账户信息)时,网站会要求用户提供这个 CSRF Token。用户在提交请求时,需要将 CSRF Token 随请求一同发送到服务器。
    3). 服务器会验证提交的 CSRF Token 是否与会话中或者 Cookie 中的 Token 匹配,如果匹配则说明请求是合法的,否则拒绝请求。

三、HTTP状态及传输方式

1. 301与302redirect(重定向)

java 复制代码
301 永久重定向
302 暂时重定向

2. forward 和 redirect 的区别

java 复制代码
1. forward
直接转发 - 客户端/浏览器发出1次请求,A请求B,B请求C。最后C把信息转发给了A
2. redirect
间接转发 - 客户端/浏览器发出2次请求,A请求B,不通并让请求C,A请求了C

3. tcp和udp

java 复制代码
1. TCP面向连接,UDP不面向连接。TCP需要3次握手和4次挥手
2. TCP是稳定传输,适合小流量,UDP是可能存在丢包,用于大文件传输/在线游戏等

4. OSI 的七层模型

java 复制代码
OSI(Open Systems Interconnection)模型是一个网络协议的参考模型,将网络通信划分为七个层次,每个层次负责不同的功能。以下是 OSI 模型的七层以及通俗易懂的例子:

1. 物理层(Physical Layer):

负责传输原始比特流,处理物理连接、电压、光信号等。
例子:以太网的电缆、光纤、网卡等。

2. 数据链路层(Data Link Layer):

提供点对点的可靠数据传输,将比特流分组成帧,并进行错误检测和纠正。
例子:以太网帧、Wi-Fi 数据帧。

3. 网络层(Network Layer):

负责寻址和路由,将数据包从源主机传输到目标主机。
例子:IP 地址、路由器。

4. 传输层(Transport Layer):

提供端到端的数据传输,负责分段、重组和流量控制。
例子:TCP、UDP。

5. 会话层(Session Layer):

管理不同应用之间的会话,建立、维护和终止连接。
例子:会话管理、连接控制。
6. 表示层(Presentation Layer):

负责数据的格式转换、加密、解密等,确保应用之间的数据能够正确解释。
例子:数据压缩、加密解密。

7. 应用层(Application Layer):

最上层,提供用户应用程序的接口,处理用户数据和网络通信。
例子:Web 浏览器、电子邮件客户端、文件传输协议(FTP)。

5. HTTP常见状态码

java 复制代码
200 OK: 请求正常
204 No Content:服务器处理了请求,但是木有任何返回
400 Bad Request:用户发送了请求,但是服务器无法处理;不认识看不懂
401 Unauthorized:认证失败,鉴权过期等
403 Forbidden:请求被拒绝
404 Not Found:请求的链接有问题可能,找不到
500 Internal Server Error:服务器异常了
503 Service Unavailable:服务器暂时无法处理请求,可能是维护
504 Service Timeout:服务器从上游接收消息超时
相关推荐
虚拟搬运工5 分钟前
Python类及元类的创建流程
开发语言·chrome·python
Code哈哈笑17 分钟前
【C++ 学习】多态的基础和原理(10)
java·c++·学习
chushiyunen23 分钟前
redisController工具类
java
消失的旧时光-194325 分钟前
kotlin的密封类
android·开发语言·kotlin
A_cot28 分钟前
Redis 的三个并发问题及解决方案(面试题)
java·开发语言·数据库·redis·mybatis
学步_技术29 分钟前
Python编码系列—Python原型模式:深克隆与高效复制的艺术
开发语言·python·原型模式
刘某某.34 分钟前
使用OpenFeign在不同微服务之间传递用户信息时失败
java·微服务·架构
alden_ygq35 分钟前
GCP容器镜像仓库使用
java·开发语言
七折困41 分钟前
列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()
java·集合·数组·排序
苹果酱05671 小时前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件