目录
一、简述CSRF攻击的思想及解决方法
1、CSRF全称是“跨站请求伪造”。即黑客可以伪造用户的身份去做一些操作,进而实现自身目的。要完成一次CSRF攻击,受害者必须依次完成两个步骤:
(1)登录受信任网站A,并在本地生成Cookie;
(2)在不登出A的情况下,访问危险网站B。
此时,黑客就可以获取你的Cookie从而达成不可告人的目的。
2、CSRF攻击是一种请求伪造的攻击方式,它利用的是服务器不能识别用户的类型从而盗取用户的信息来攻击。因此要防御这种攻击,应该从服务器端入手,增强服务器的识别能力,设计良好的防御机制。主要有以下几种方式:
(1)请求头中的Referer验证(不推荐)
HTTP的头部有一个Referer信息的字段,它记录着该次HTTP请求的来源地址(即它从哪里来的),既然CSRF攻击是伪造请求从服务器发送过来的,那么我们就禁止跨域访问,在服务器端增加验证,过滤掉那些不是从本地服务器发出的请求,这样可以在一定程度上避免CSRF攻击。但是这也存在缺点,比如如果是从搜索引擎所搜结果调整过来,请求也会被认为是跨域请求。
(2)请求令牌验证(Token验证)
Token验证是一种比较广泛使用的防止CSRF攻击的手段,当用户通过正常渠道访问服务器时,服务器会生成一个随机的字符串保存在session中,并作为令牌(token)返回给客户端,以隐藏的形式保存在客户端中,客户端每次请求都会带着这个token,服务器根据该token判断该请求是否合法。
二、MAC地址和IP地址的作用
1、IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
MAC地址是物理地址,用来定义网络设备的位置。
2、IP地址的分配是根据网络的拓扑结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上,而不是网络所在的拓扑位置基础上,这种方案是不可行的。
3、当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无需取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无需换一个新的网卡。
4、无论是局域网还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由APP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。
三、TCP三次握手和四次挥手的过程
1、三次握手
(1)第一次握手:建立连接时,客户端向服务器发送SYN包(seq=x),请求建立连接,等待确认;
(2)第二次握手:服务端收到客户端的SYN包,回复一个ACK(ACK=x+1)确认收到,同时发送一个SYN包(seq=y)给客户端;
(3)第三次握手:客户端收到SYN+ACK包,再回复一个ACK包(ACK=y+1),告诉服务端已经收到;
(4)三次握手完成,成功建立连接,开始传输数据。
2、四次挥手
(1)第一次挥手:客户端发送FIN(FIN=1)给服务端,告诉它自己的数据已经发送完毕,请求终止连接,此时客户端不发送数据,但还能接收数据;
(2)第二次挥手:服务端收到FIN包,回一个ACK给客户端,告诉它已经收到包了,此时还没有断开socket连接,而是等待剩下的数据传输完毕;
(3)第三次挥手:服务端等待数据传输完毕后,向客户端方式FIN包,表明可以断开连接;
(4)第四次挥手:客户端收到后,回一个ACK包表明确认收到,等待一段时间,确保服务端不再有数据发过来,然后彻底断开连接。
四、TCP两次握手是否可行
1、为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方接收的。三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。
2、如果只有两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。
五、简述TCP和UDP的区别,它们的头部结构是什么样的
1、TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。UDP是无连接的。
TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性。但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序到达。
TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率。
TCP是一对一的连接,UDP则可以支持一对一、多对多、一对多的通信。
TCP面向的是字节流方服务,UDP面向的是报文的服务。
2、TCP头部结构为:
/* TCP头中的选项定义
kind(8bit)+Length(8bit,整个选项的长度,包含前两部分)+内容(如果有的话)
KIND = 1 表示“无操作NOP”,无后面的部分
2 表示maximum segment。后面的LENGTH就是maximum segment选项的长度(以byte为单位,1+1+内容部分长度)
3 表示windows scale。 后面的LENGTH就是windows scale选项的长度(以byte为单位,1+1+内容部分长度)
4 表示 SACK permitted。 LENGTH为2,没有内容部分。
5 表示这是一个SACK包。LENGTH为2,没有内容部分。
8 表示时间戳,LENGTH为10,含8个字节的时间戳。
*/
typedef struct_TCP_OPTIONS
{
char m_ckind;
char m_cLength;
char m_cContext[32];
}__attribute__((packed))TCP_OPTIONS,*PTCP_OPTIONS;
UDP头部结构如下:
……cpp
/*UDF头定义,共8个字节*/
typedef struct_UDP_HEADER
{
unsigned short m_usSourcePort; //源端口号16bit
unsigned short m_usDestPort; //目的端口号16bit
unsigned short m_usLength; //数据包长度16bit
unsigned short m_usCheckSum; //校验和16bit
}__attribute__((packed))UDP_HEADER,*PUDP
……
标签:知识点,UDP,请求,握手,TCP,计算机网络,CSRF,客户端
From: https://blog.csdn.net/L_peanut/article/details/139624655