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

一、 反射/序列化/拷贝

1. 反射
//反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
//在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. 序列化
序列化是指将一个对象抓换为字节流在网络上传输到服务器,服务器对其进行反序列化
可以使用 Serializable 接口来标记一个类可以被序列化
3. 动态代理
Java 动态代理是一种在运行时生成代理类的机制,
允许你在不事先知道具体代理类的情况下创建代理对象。
动态代理通常用于在代理模式中,通过代理对象来控制对实际对象的访问,
并可以在代理的前后添加一些额外的逻辑。


动态代理的用途包括:

日志记录:在方法调用前后添加日志记录。
性能监控:统计方法调用的耗时。
事务管理:在方法调用前后开启、提交或回滚事务。
权限控制:在方法调用前检查用户权限。
缓存控制:在方法调用前从缓存中获取数据,或在方法调用后将结果缓存起来。
4. 深拷贝和浅拷贝
1. 浅拷贝
只复制了对象的引用地址,2个引用指向同一个内存地址,在其中一个变化后,另一个的也会同时变化。
2. 深拷贝
既复制了内存地址,也复制了引用地址;变化不会影响其他

二、Http相关

1. Session与Cookie
1. Session存储在服务端,Cookie存储在用户本地浏览器
2. Session更加安全,cookie可能会存在被篡改的风险
3. Session存储比较大的数据,而Cookie相对比较小,不超过4kb
Session的工作原理:存储在服务器的Session可以理解是一个Map。
Session是key,里面还有其他用户信息是value。
用户请求的时候拿Cookie包装了sessionID换取其他信息
2. 如何避免sql注入
攻击原理:在浏览器通过伪造,注入一段sql达到查询/修改数据库,达到攻击目的
避免:
1. 使用参数化查询
2. 对输入的内容进行(正则/字符串)过滤
3. 使用 Web 应用防火墙(WAF)来检测和阻止恶意 SQL 注入攻击。
3. XSS(跨站脚本攻击)
原理:用户在浏览网页的时候,通过Xss注入HTML代码,当用户浏览或者输入某些内容的时候自动调用,
从而获取当前网页用户的消息
避免:对输入/URL进行过滤,对输出进行编码。
4. CSRF(跨站网站攻击
原理:
给用户提供和目标网站类似的网站/放置恶意链接,用户在登录状态下点击某功能。
导致调用链其他链接,例如:修改密码,转账等

避免:
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(重定向)
301 永久重定向
302 暂时重定向
2. forward 和 redirect 的区别
1. forward
直接转发 - 客户端/浏览器发出1次请求,A请求B,B请求C。最后C把信息转发给了A
2. redirect
间接转发 - 客户端/浏览器发出2次请求,A请求B,不通并让请求C,A请求了C
3. tcp和udp
1. TCP面向连接,UDP不面向连接。TCP需要3次握手和4次挥手
2. TCP是稳定传输,适合小流量,UDP是可能存在丢包,用于大文件传输/在线游戏等
4. OSI 的七层模型
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常见状态码
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:服务器从上游接收消息超时
6. HTTP HTTPS区别
1. 安全性:https是基于加密传输,http明文传输
2. 证书:https的网站是基于证书认证
3. 端口:http-80,https-443
4. 使用场景:http网站文本查看等,https登录、支付等
7. HTTPS传输过程
1. 客户端请求服务端
2. 服务端收到请求,发送证书及公钥
3. 客户端收到证书后验证,查看过期时间等等。
    异常提示
    正常继续,生成随机数,随机数通过公钥加密传输给服务端
4. 服务端收到请求后,解密获取到私钥,并把数据混合在一起通过加密方式传输到客户端
5. 客户端收到消息,通过私钥解密,获取到了信息
8. 三次握手
首先明确过程:
1. 客户端发送请求链接
2. 服务端确认可以连接,发送请求和客户端连接的请求
3. 客户端收到后发送给服务器确认可以连接


每个请求类别的字段:
1. 请求需要有SYN标志位,默认1,每个链接都有数据包,数据包报文号seq
2. 每个确认都有ACK的标志位,默认1,确认数据包ack=上一次的seq+1(表示我收到了初始序列seq=x的报文);
确认也需要有自己的数据包报文号seq=[具体情况]


具体过程:
第一次握手:客户端发送和服务端连接的请求:SYN=1,seq=x
第二次握手:服务端发送确认和客户端连接,并且发送服务端和客户端建立连接的请求
           ACK=1,ack=x+1;       SYN=1,seq=y
第三次握手:客户端发送确认可以连接的请求
            ACK=1, ack=y+1,seq=x+1

9. 为什么要三次握手,2次行不行
废话文学,特喵的当然不行啊!!!

2次握手可能会导致服务端消费+建立过期的会话

栗子(假设只有2次握手的连接):
1. 客户端发送了一个数据包报文号seq=x的连接请求,但是由于网络等等原因,导致服务端没有收到。
    也导致了客户端一直没有收到服务端确认建立连接的请求
2. 客户端不得已再次发送seq=y请求,这次网络顺畅,服务端收到后,发送了确认可以连接的请求。成功建立连接. 数据传输完成之后断开连接
3. 然而过了一会服务端收到了seq=x的请求数据,服务端很高兴又能和他建立连接了,然后建立了一个过期的请求链接
 9. 四次挥手
1. 请求结束会有FIN,回应结束是ACK,ack回复的时候会有,seq是请求的数据报文号

过程:
客户端发送结束的请求:FIN=1,seq=u
服务端回应已收到断开的请求,此时服务器还是可以继续发送:ACK=1,ack=u+1,seq=v
服务端数据传输完成之后,发送请求断开的:FIN=1,seq=w      ACK=1,ack=u+1
客户端收到断开请求,并且做回应:ACK=1,ack=w+1, seq=u+1

四次挥手

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值