网络安全面试题

什么是SQL注入攻击

SQL 注入攻击是一种常见的 Web 应用程序安全漏洞,攻击者通过在 Web 应用程序的输入框、搜索框、登陆框等地方注入恶意的 SQL 语句,从而获取未授权的访问权限或者窃取敏感数据。攻击者利用注入的 SQL 语句执行恶意操作,例如删除、修改、查询数据,甚至可以完全接管数据库服务器的控制权。SQL 注入攻击的原因主要是开发人员没有对用户输入的数据进行足够的过滤和验证,导致恶意代码可以轻松地插入到 SQL 语句中。
为了防范 SQL 注入攻击,开发人员应该采取以下措施:

  1. 对用户输入的数据进行严格的过滤和验证,确保只有合法的数据可以被插入到 SQL 语句中。
  2. 使用参数化的 SQL 语句,避免将用户输入的数据直接拼接到 SQL 语句中。参数化的 SQL 语句可以提高安全性,防止恶意代码注入。
  3. 对 Web 应用程序进行定期的安全审计和漏洞扫描,及时发现并修复潜在的安全漏洞。
  4. 提高开发人员的安全意识,加强对安全漏洞的理解和防范措施的掌握。
  5. 使用安全编码规范和安全开发工具,例如安全编码插件和安全开发框架等,提高安全性。

什么是XSS攻击,如何防范

XSS 攻击(跨站脚本攻击)是一种常见的 Web 应用程序漏洞,攻击者可以利用该漏洞向用户的浏览器中注入恶意的脚本代码,从而窃取用户的敏感信息,如用户名、密码、Cookie 等。XSS 攻击通常分为两种类型:反射型和存储型。反射型 XSS 攻击是攻击者向 Web 应用程序发送包含恶意脚本的请求,然后将响应中的恶意脚本注入到页面中;而存储型 XSS 攻击是攻击者将恶意脚本存储在 Web 应用程序的数据库中,然后其他用户在访问该页面时,从数据库中取出并执行该脚本。
为了防范 XSS 攻击,以下是一些常见的措施:

  1. 输入验证:在 Web 应用程序的输入处,对输入的数据进行有效性验证,过滤掉无效或恶意的输入。可以使用现成的输入验证库或正则表达式来过滤输入。
  2. 输出过滤:在将用户输入的数据输出到 Web 页面上之前,将特殊字符(如"<“、”>“、”&“等)转义为 HTML 实体(如”<“、”>“、”&"等)。这样可以避免用户输入的恶意脚本被解析和执行。
  3. 使用 CSP(内容安全策略):CSP 是一种安全策略,可以限制 Web 页面中可以加载的资源,如脚本、样式表、图片等。使用 CSP 可以减轻 XSS 攻击带来的风险,因为攻击者无法在受害者的浏览器中加载恶意代码。
  4. 使用 HTTP-only Cookie:将 Cookie 标记为 HTTP-only,可以防止攻击者通过 JavaScript 脚本窃取用户的 Cookie 信息。
  5. 对用户数据进行 HTML 标签白名单过滤:只允许用户输入白名单中的 HTML 标签和属性,并过滤掉不在白名单中的标签和属性。
  6. 操作 DOM 时使用框架提供的 API:在操作 DOM 时,使用框架提供的 API 而不是直接操作 DOM 对象,因为框架通常会提供安全的 API,可以防止 XSS 攻击。

什么是CSRF攻击,如何防范

CSRF攻击是跨站请求伪造的缩写,它是一种利用用户在已登录的网站上执行非本意的操作的攻击方法。比如,用户在网站A登录后,访问了一个包含恶意代码的网站B,网站B利用用户的Cookie信息,向网站A发出请求,完成一些操作,如转账、改密码等。

防范CSRF攻击的方法有以下几种:

  • 验证HTTP Referer字段,只接受来自本站点的请求,拒绝来自外部站点的请求。
  • 在非GET请求中增加Token并验证,Token是一个随机生成的字符串,存放在表单或者请求头中,服务器端要求每个请求都包含正确的Token,否则拒绝该请求。
  • 利用Cookie的SameSite属性,设置为Strict或Lax,这样浏览器就不会在跨站请求中携带该Cookie,从而避免CSRF攻击。
  • 在不使用Web应用程序时注销它们,保护好用户名和密码,不要让浏览器记住密码,在处理应用程序并登录时避免浏览其他网站。

什么是SSRF漏洞以及利用方法?

SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内网系统。SSRF漏洞的产生,主要是因为在服务端的Web应用,需要从其他服务器拉取数据资源,比如图片、视频、文件的上传/下载、业务数据处理结果,但其请求地址可被外部用户控制。请求地址被恶意利用的话,就能够以服务端的身份向任意地址发起请求。
SSRF漏洞可以被利用来探测攻击者无法访问到的网络区域,比如服务器所在的内网,或是受防火墙访问限制的主机。攻击者可以通过构造恶意URL来利用SSRF漏洞,以获取受保护网络内的资源。例如,攻击者可以使用SSRF漏洞来对内网服务器、办公机进行端口扫描、资产扫描、漏洞扫描;窃取本地和内网敏感数据;攻击服务器本地或内网应用;跳板攻击;绕过安全防御;拒绝服务攻击等。
防护SSRF漏洞需要采取多种措施,包括禁止302跳转或每跳转一次都进行校验目的地址是否为内网地址或合法地址;过滤返回信息;禁用高危协议;设置URL白名单或限制内网IP;限制请求的端口为http的常用端口等。

什么是文件上传漏洞。如何防范

文件上传漏洞是指网站或应用程序允许用户上传任意文件,但未对上传的文件进行适当的验证和过滤,从而可能导致恶意用户上传危险的文件,如恶意脚本、病毒、木马等,并在服务器上执行,从而获取网站控制权限或造成其他安全事件。
防范文件上传漏洞的方法包括:

  1. 对上传的文件进行文件类型和文件大小的限制,只允许上传安全的文件类型,如图片、音频、视频等,并限制文件大小。
  2. 对上传的文件进行验证和过滤,检查文件是否包含恶意代码或病毒,可以使用第三方的安全组件或自己编写的代码进行验证。
  3. 避免使用普通的文件上传组件,而是使用安全的文件上传组件,如 FineUploader、Pluploader 等,这些组件提供了安全的文件上传功能,并可以防止一些常见的文件上传漏洞。
  4. 对于需要上传文件的页面,尽可能使用 HTTP POST 方法提交表单,而不是使用 HTTP GET 方法,因为 HTTP POST 方法可以防止跨站脚本攻击 (XSS)。
  5. 在服务器端,对上传的文件进行适当的处理和存储,如将文件保存在安全的目录中,并限制文件的执行权限。
  6. 定期更新和升级服务器端的软件和系统,以确保服务器端软件和系统不会受到已知漏洞的攻击。

什么是DDos 攻击,如何防范

DDoS(分布式拒绝服务攻击)是一种网络攻击,攻击者通过控制大量计算机组成的僵尸网络,向目标服务器发送大量流量,从而占用目标服务器的资源,导致其无法正常响应合法用户的请求。DDoS 攻击通常会造成目标网站的瘫痪,影响其正常运营。
防范 DDoS 攻击的方法包括:

  1. 增强网络带宽:充足的网络带宽可以有效地抵御 DDoS 攻击。企业可以选择购买更大的网络带宽,或者使用 DDoS 防护服务,以确保网络畅通。
  2. 升级主机服务器硬件:在有网络带宽保证的前提下,提升主机服务器的硬件配置,如 CPU、内存、硬盘等,可以提高服务器的性能和抗攻击能力。
  3. 关闭不必要的服务:关闭不必要的服务可以减少攻击面,从而降低被攻击的风险。
  4. 限制同时打开的 Syn 半连接数目:限制同时打开的 Syn 半连接数目可以防止 TCP SYN 洪水攻击。
  5. 缩短 Syn 半连接的 time out 时间:缩短 Syn 半连接的 time out 时间可以加快建立连接的速度,降低被攻击的风险。
  6. 及时更新系统补丁:及时更新系统补丁可以修复漏洞,提高系统的安全性。
  7. 使用 DDoS 防护服务:企业可以选择使用 DDoS 防护服务,如云防护、硬件防护,如防火墙:使用防火墙可以过滤掉恶意流量,从而保护服务器。负载均衡:使用负载均衡可以将流量分散到多个服务器上,从而减轻单个服务器的压力。DDoS防护软件:使用专业的DDoS防护软件可以有效地防止DDoS攻击。等,以确保网络的安全性。
    总结起来,防范 DDoS 攻击需要综合使用多种方法,增强网络的安全性和稳定性。

DDOS是什么?有哪些?CC攻击是什么?区别是什么?

DDOS(Distributed Denial of Service)攻击是指利用多台计算机共同发起攻击,向目标服务器发送大量请求,从而使目标服务器超载、瘫痪的一种网络攻击。DDOS 攻击通常由被攻击者无法承受的大量流量组成,攻击者通过控制大量“肉鸡”(也称“僵尸”、“傀儡”等)来发动攻击。肉鸡是指通过植入恶意软件,控制了大量计算机的黑客所拥有的机器。
DDOS 攻击有很多种类型,常见的包括:

  1. ICMP Flood:利用 ICMP 协议向目标服务器发送大量无效的 Ping 请求,使目标服务器无法正常处理其他请求。
  2. UDP Flood:利用 UDP 协议向目标服务器发送大量无效的数据包,使目标服务器无法正常处理其他请求。
  3. SYN Flood:利用 TCP 协议向目标服务器发送大量伪造的 SYN 请求,使目标服务器无法正常处理其他请求。
  4. HTTP Flood:利用 HTTP 协议向目标服务器发送大量无效的 HTTP 请求,使目标服务器无法正常处理其他请求。
    CC(Challenge Collapsar)攻击是一种特殊的 DDOS 攻击,它利用 HTTP 协议向目标服务器发送大量无效的 HTTP 请求,从而使目标服务器超载、瘫痪。与普通的 HTTP Flood 不同,CC 攻击还会发送一些特殊的 HTTP 请求头,以避免被目标服务器的防火墙过滤掉。
    总的来说,DDOS 攻击是一种恶意攻击行为,而 CC 攻击是 DDOS 攻击中的一种特殊类型。两者的区别主要在于攻击方式和攻击手段不同,但都会对目标服务器造成无法正常提供服务的影响。

arp协议的工作原理

ARP(Address Resolution Protocol)协议是一种将 IP 地址解析为 MAC 地址的协议。在一个局域网(LAN)中,每个设备都有一个唯一的 MAC 地址,用于在数据链路层进行通信。但是,应用程序通常使用 IP 地址来寻址目标设备。因此,当一个设备需要向另一个设备发送数据时,它需要知道目标设备的 MAC 地址。
ARP 协议的工作原理如下:

  1. 设备 A 需要向设备 B 发送数据,但是它只知道设备 B 的 IP 地址,不知道其 MAC 地址。
  2. 设备 A 在自己的 ARP 缓存中查找设备 B 的 MAC 地址,如果找到了,则直接将数据包发送给设备 B。
  3. 如果设备 A 在 ARP 缓存中没有找到设备 B 的 MAC 地址,它就会向网络中的所有设备广播一个 ARP 请求(ARP Request)数据包,询问设备 B 的 MAC 地址。
  4. 在收到 ARP 请求数据包的设备中,只有那些 IP 地址与请求中的目标 IP 地址匹配的设备才会响应一个 ARP 响应(ARP Response)数据包,包含自己的 MAC 地址。
  5. 设备 A 收到 ARP 响应后,就可以将设备 B 的 MAC 地址存储在自己的 ARP 缓存中,并使用该 MAC 地址发送数据包。
    由于 ARP 请求和响应都是广播发送的,因此其他所有设备都能够看到这些消息。为了避免 ARP 欺骗(ARP Spoofing)攻击,现代操作系统通常会对接收到的 ARP 消息进行验证,以确保它们来自于正确的发送者。

什么是RARP?工作原理

RARP是反向地址解析协议,是一种用于将物理地址(MAC地址)转换为网络层地址(IP地址)的协议。RARP协议的工作原理如下:

1.发送端发送一个本地的RARP广播包,在此广播包中声明自己的MAC地址,并且请求任何收到此请求的RARP服务器分配一个IP地址。
2.本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址。
3.如果存在,RARP服务器就给源主机发送一个响应数据包,并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何响应。
4.源端在收到从RARP服务器来的响应信息后,利用得到的IP地址进行通信;如果一直没有收到RARP服务器的响应信息,则表示初始化失败。

dns是什么?dns的工作原理

DNS是域名系统的缩写,它是一种用于将域名和IP地址相互映射的分布式数据库,可以让用户更方便地访问互联网,而不用记住IP地址¹。DNS的工作原理是:

  • 当用户在浏览器中输入一个域名,比如www.zdns.cn,浏览器会向本地的DNS服务器(递归服务器)发起一个查询请求。
  • 如果本地DNS服务器没有缓存该域名对应的IP地址,它会向根DNS服务器(权威服务器)查询,根DNS服务器会返回负责.cn顶级域名的DNS服务器的地址。
  • 本地DNS服务器再向.cn的DNS服务器查询www.zdns.cn的IP地址,.cn的DNS服务器会返回负责zdns.cn二级域名的DNS服务器的地址。
  • 本地DNS服务器最后向zdns.cn的DNS服务器查询www.zdns.cn的IP地址,得到一个结果,比如202.173.11.10,并返回给浏览器。
  • 浏览器根据这个IP地址与目标网站建立连接,并缓存这个域名和IP地址的对应关系,以备下次使用。

rip协议是什么?rip的工作原理?路由收敛机制的问题

RIP协议是路由信息协议的缩写,它是一种基于距离矢量算法的内部网关协议,用于在小型网络中实现动态路由选择。RIP协议的工作原理是:

  • RIP协议使用跳数(经过的路由器个数)作为度量值来衡量到达目的网络的距离,最大跳数为15,超过15则认为不可达。
  • RIP协议通过UDP报文(端口号为520)进行路由信息的交换,有两种报文类型:Request和Response。Request用于请求邻居路由器的路由信息,Response用于发送或回应路由信息。
  • RIP协议有两个版本:RIPv1和RIPv2。RIPv1是有类别的路由协议,不携带子网掩码,不支持VLSM和CIDR,使用广播更新。RIPv2是无类别的路由协议,携带子网掩码,支持VLSM和CIDR,使用组播更新(组播地址为224.0.0.9)。
  • RIP协议在更新和维护路由信息时使用四个定时器:更新定时器(Update timer),老化定时器(Age timer),垃圾收集定时器(Garbage-collect timer)和抑制定时器(Suppress timer)。
  • 更新定时器用于控制周期性发送路由更新报文的时间间隔,默认为30秒。
  • 老化定时器用于检测路由条目是否过期,如果在老化时间内没有收到邻居发来的相应路由更新报文,则认为该路由不可达,度量值置为16,并启动垃圾收集定时器。默认老化时间为180秒。
  • 垃圾收集定时器用于删除不可达的路由条目,如果在垃圾收集时间内仍然没有收到相应路由更新报文,则从路由表中彻底删除该路由。默认垃圾收集时间为120秒。
  • 抑制定时器用于防止路由震荡,在收到对端的度量值为16的路由更新后,对应路由进入抑制状态,并启动抑制定时器。在抑制定时器超时之前,即使再收到对端度量值小于16的更新,也不接受。默认抑制时间为180秒。
    RIP(Routing Information Protocol)是一种内部网关协议,用于在小型局域网内完成路由选择。

简单来说,它的工作原理是:

  1. 每个RIP路由器都会维护一个路由表,记录当前它可以到达的所有网络以及下一跳是哪个路由器。
  2. 路由器会每30秒定期向相邻路由器广播自己的路由表信息。
  3. 当路由器收到相邻路由器的路由信息时,会更新自己的路由表。判断原则是找跳数最少的路由。
  4. 比如A路由器当前到B网络的最少跳数是3,如果收到C路由器发来的到B网络只需2跳的路由,A就会更新自己的路由表,使用C作为下一跳。
  5. 如果很长时间没有收到某条路由的更新,RIP会将其从路由表删除。
  6. 当网络拓扑变化时,路由表就会通过这个定期交换更新过程最终重新算出最优路由。
    所以RIP协议就是通过让路由器之间定期交换自己的路由表信息,动态地选择出最佳路径来进行数据包转发的路由协议。它适用于小型网络。

RIP协议由于使用距离矢量算法,存在一些路由收敛机制的问题,主要有以下两种:

  • 计数到无穷(Count to Infinity):当一个网络失效时,RIP协议需要等待路由表中的距离值逐渐增加到16(表示不可达)才能删除该路由,这个过程可能需要很长时间,导致网络收敛缓慢。在这期间,可能出现路由环路的情况,即路由器互相学习错误的路由信息。
  • 水平分割(Split Horizon):为了防止计数到无穷的问题,RIP协议采用了水平分割的技术,即从一个接口学来的路由不会从该接口发回去。这样可以避免一些环路的产生,但是在有环的网络中,仍然可能出现计数到无穷的问题。

为了解决这些问题,RIP协议还采用了一些其他的技术,如:

  • 毒化路由(Poisoned Route):当一个网络失效时,RIP协议会向邻居路由器发送一个度量值为16的路由更新报文,表示该网络不可达。这样可以加快网络收敛的速度,并防止错误的路由传播。
  • 毒性逆转(Poison Reverse):当一个路由器收到一个度量值为16的路由更新报文时,它会向发送该报文的邻居路由器回复一个同样的报文,表示该网络不可达。这样可以防止水平分割技术失效的情况。
  • 抑制定时器(Hold-down Timer):当一个路由条目变为不可达时,RIP协议会启动一个抑制定时器,在该定时器超时之前,不接受任何关于该路由条目的更新报文。这样可以防止收到过时或错误的路由信息。
  • 触发更新(Triggered Update):当一个网络发生变化时,RIP协议会立即向邻居路由器发送一个更新报文,而不需要等待周期性更新。这样可以加快网络收敛的速度,并及时通知其他路由器。

OSPF协议?OSPF的工作原理

OSPF(Open Shortest Path First) 是一种基于链路状态的路由协议,用于在 IP 网络中寻找最短路径。OSPF(开放式最短路径优先)是一种基于链路状态的内部网关协议。它直接运行在 IP 层上面,协议号为 89,采用组播方式进行 OSPF 包交换,组播地址为 224.0.0.5 (全部 OSPF 设备)和 224.0.0.6(指定设备)。下面是 OSPF 的工作原理的详细说明:

  1. 初始化:当 OSPF 路由器启动时,它会向网络中的所有路由器发送一个 Hello 消息。Hello 消息包含路由器的 ID、邻居列表、连接的网络和链路状态等信息。
  2. 邻居关系建立:当两个 OSPF 路由器在相同的网络中时,它们会通过 Hello 消息交换信息,以确定它们之间的链路状态。如果两个路由器都认为自己是同一网络中的主路由器 (Master Router),它们将通过交换 Link State Advertisement(LSA) 消息来建立邻居关系。
  3. 路由器 ID 分配:在 OSPF 中,每个路由器都必须有一个唯一的 ID。如果路由器启动时没有指定 ID,它将自动生成一个。路由器 ID 的长度为 16 位,通常是一个回环地址加上一个唯一的标识符。
  4. 链路状态数据库 (LSDB) 建立:OSPF 路由器使用链路状态数据库 (LSDB) 来存储网络中的拓扑信息。LSDB 包含所有路由器的链路状态信息,这些信息是通过 LSA 消息交换得到的。每个 LSDB 条目都包含一个路由器的 ID、它所连接的网络和链路状态等信息。
  5. 最短路径树 (SPT) 计算:OSPF 使用 SPT 算法来计算从源路由器到目标网络的最短路径。SPT 算法使用 Dijkstra 算法来计算每个路由器到目标网络的最短路径,并将这些路径组合成一个树形结构。
  6. 路由计算:一旦 SPT 计算完成,每个 OSPF 路由器都将使用 SPT 来计算到达目标网络的最佳路径。每个路由器都将其计算出的最佳路径添加到其路由表中,并将该路径作为到达目标网络的推荐路径。
  7. 路由更新和刷新:当网络拓扑发生变化时,OSPF 路由器会通过发送 LSA 消息来通知相邻路由器。相邻路由器将更新其 LSDB 条目,并重新计算其 SPT。然后,每个路由器都将其计算出的最佳路径添加到其路由表中,并将该路径作为到达目标网络的推荐路径。
    总结起来,OSPF 协议通过建立邻居关系、交换链路状态信息、计算最短路径和广播路由表信息等方式,实现网络路由的自动化和优化。

STP,RSTP和MSTP的工作原理,以及它们的区别?

STP(Spanning Tree Protocol)、RSTP(Rapid Spanning Tree Protocol)和 MSTP(Multiple Spanning Tree Protocol)都是生成树协议,用于在网络中防止环路产生。它们的工作原理和区别如下:

  1. STP:STP 是最早的生成树协议,它通过选举根桥(Root Bridge)和根端口(Root Port)、指定端口(Designated Port)和阻塞端口(Blocking Port)来防止环路的产生。STP 的收敛时间较长,需要几十秒的时间来完成网络拓扑的收敛。
  2. RSTP:RSTP 是 STP 的增强版,它通过更快的收敛速度和更少的 BPDU(Bridge Protocol Data Units)传输来提高网络的性能。RSTP 使用更快的端口状态(Forwarding、Learning 和 Disabled)和更少的 BPDU 交换来实现网络拓扑的收敛,通常只需要几秒钟就能完成收敛。
  3. MSTP:MSTP 是 STP 和 RSTP 的扩展,它允许网络中存在多个根桥,从而实现更好的网络容错性和负载均衡。MSTP 使用区域(Region)的概念来实现多个根桥的存在,每个区域都有一个区域根桥(Region Root Bridge),而所有区域根桥都连接到同一个根桥,从而形成一个单一的生成树。MSTP 的收敛时间与 STP 和 RSTP 相当,取决于网络的大小和拓扑复杂度。
    总的来说,RSTP 是 STP 的增强版,可以更快地收敛网络,而 MSTP 则是 STP 和 RSTP 的扩展,可以更好地支持多个根桥和负载均衡。在实际应用中,STP、RSTP 和 MSTP 通常可以相互兼容,但需要根据具体的网络需求和设备支持情况来选择合适的生成树协议。

一次完整的HTTP请求过程

一次完整的HTTP请求过程包括以下步骤:

  1. 客户端先通过查询缓存,hosts文件最后DNS解析获取服务器的IP地址。
  2. 客户端与服务器建立TCP连接,这一过程通常需要经过三次握手。
  3. 客户端向服务器发送HTTP请求,包括请求行、请求头部、空行和请求数据。
  4. 服务器接收到客户端的HTTP请求后,解析HTTP请求并处理业务逻辑。
  5. 服务器返回一个HTTP响应给客户端,包括状态行、响应头部、空行和响应数据。
  6. 客户端接收到服务器的HTTP响应后,开始解析HTML代码,并请求HTML代码中的资源(如js、css、图片等)。
  7. 浏览器对页面进行渲染呈现给用户。
  8. 最后,服务器关闭TCP连接(四次挥手)。

http长连接和短连接的区别,如何判断

HTTP长连接和短连接主要有以下几点区别:

  1. 建立连接次数
    短连接:每次请求都要新建立一次TCP连接。
    长连接:多次请求重用同一个TCP连接。
  2. 连接关闭时机
    短连接:一请求一响应后就关闭TCP连接。
    长连接: keepaliveTimeout(如30s)内可以持续发送请求,超时后关闭。
  3. 性能
    短连接:建立连接的开销大,响应速度慢。
    长连接:省去频繁创建连接的开销,响应更快。
  4. HTTP版本
    短连接:只有HTTP/1.0默认使用短连接。
    长连接:HTTP/1.1默认使用长连接。
  5. 使用场景
    短连接:文件下载等一次性请求使用。
    长连接:网页访问等需要多次请求使用。
    总体来说,HTTP长连接比短连接性能更好,现代HTTP基本都使用长连接。只有旧系统使用短连接。

判断HTTP连接是长连接还是短连接的方法有以下几种:

  1. 查看HTTP版本
    如果是HTTP/1.0,则默认是短连接。
    如果是HTTP/1.1,则默认是长连接。
  2. 查看Connection头
    短连接会有Connection: close。
    长连接会有Connection: keep-alive。
  3. 抓包分析
    用抓包工具捕获 HTTP请求响应包,如果看到TCP连接在请求结束后被关闭然后新建立连接,则是短连接。如果TCP连接被持续复用不关闭,则是长连接。
  4. 代码分析
    如果是自己编写的客户端程序,可以在代码里面确认是否设置了长连接。一般使用循环持续发送请求表示长连接。
  5. 测试连接
    可以用工具模拟发送多个请求,若请求之间TCP连接没有关闭重建,则确认是长连接。
    综合利用上述方法,可以确切判断出HTTP的连接类型。这对理解和分析HTTP工作原理很有帮助。

TCP如何保证可靠传输?

TCP协议通过多种方式来保证可靠传输。这些方式包括检验和、序列号/确认应答、超时重传、最大消息长度、滑动窗口控制等。

  • 检验和:通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。
  • 序列号/确认应答:这个机制类似于问答的形式。比如在课堂上老师会问你“明白了吗? ”,假如你没有隔一段时间没有回应或者你说不明白,那么老师就会重新讲一遍。其实计算机的确认应答机制也是一样的,发送端发送信息给接收端,接收端会回应一个包,这个包就是应答包。上述过程中,只要发送端有一个包传输,接收端没有回应确认包(ACK包),都会重发。或者接收端的应答包,发送端没有收到也会重发数据。这就可以保证数据的完整性。
  • 超时重传:超时重传是指发送出去的数据包到接收到确认包之间的时间,如果超过了这个时间会被认为是丢包了,需要重传。那么我们该如何确认这个时间值呢?我们知道,一来一回的时间总是差不多的,都会有一个类似于平均值的概念。比如发送一个包到接收端收到这个包一共是0.5s,然后接收端回发一个确认包给发送端也要0.5s,这样的两个时间就是RTT(往返时间)。然后可能由于网络原因的问题,时间会有偏差,称为抖动(方差)。从上面的介绍来看,超时重传的时间大概是比往返时间+抖动值还要稍大的时间。但是在重发的过程中,假如一个包经过多次的重发也没有收到对端的确认包,那么就会认为接收端异常,强制关闭连接。并且通知应用通信异常强行终止。
  • 最大消息长度:在建立TCP连接的时候,双方约定一个最大的长度(MSS)作为发送的单位,重传的时候也是以这个单位来进行重传。理想的情况下是该长度的数据刚好不被网络层分块。
  • 滑动窗口控制:我们上面提到的超时重传的机制存在效率低下的问题,发送一个包到发送下一个包要经过一段时间才可以。所以我们就想着能不能不用等待确认包就发送下一个数据包呢?这就提出了一个滑动窗口的概念。窗口的大小就是在无需等待确认包的情况下,发送端还能发送的最大数据量。这个机制的实现就是使用了大量的缓冲区,通过对多个段进行确认应答的功能。通过下一次的确认包可以判断接收端是否已经接收到了数据,如果已经接收了就从缓冲区里面删除数据。在窗口之外的数据就是还未发送的和对端已经收到的数据。

为什么是三次握手?不是两次、四次?

  1. 三次握手才可以阻止重复历史连接的初始化(主要原因)
  2. 三次握手才可以同步双方的初始序列号
  3. 三次握手才可以避免资源浪费

为什么挥手需要四次?

回顾下四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。 关闭连接时,客户端向服务端发送 FIN时,仅仅表示客户端不再发送数据了但是还能接收数据。 服务端收到客户端的 FIN 报文时,先回一个 ACK应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。

常见的状态码有哪些?

HTTP状态码用于表示HTTP请求和响应的结果状态,常见的有以下几类:
1xx 提示信息

  • 100 Continue 继续,客户端应继续其请求
  • 101 Switching Protocols 切换协议
    2xx 成功
  • 200 OK 请求成功
  • 201 Created 已创建
  • 202 Accepted 已接受
  • 204 No Content 无内容
    3xx 重定向
  • 301 Moved Permanently 永久重定向
  • 302 Found 临时重定向
  • 304 Not Modified 未修改
    4xx 客户端错误
  • 400 Bad Request 请求错误
  • 401 Unauthorized 未授权
  • 403 Forbidden 禁止访问
  • 404 Not Found 未找到
    5xx 服务器错误
  • 500 Internal Server Error 内部服务器错误
  • 502 Bad Gateway 错误网关
  • 503 Service Unavailable 服务不可用
  • 504 Gateway Timeout 网关超时

什么是SSL? https是如何保证数据传输的安全(SSL是怎么工作保证安全的)

SSL(Secure Sockets Layer)即安全套接层,是一种安全协议,可在Internet通信时提供秘密性、认证和数据完整性保障。HTTPS就是在HTTP下加入SSL层建立的安全传输协议。
SSL如何保证HTTPS传输安全主要通过以下几点:

  1. 数据加密
    SSL使用对称和非对称加密算法将通信数据加密,保证传输数据的保密性。
  2. 身份认证
    SSL使用证书来验证服务器身份,避免中间人攻击。
  3. 数据完整性验证
    SSL使用消息认证码确保数据在传输过程中不被改变。
  4. 使用HTTPS
    要使用SSL,就必须使用HTTPS而非HTTP协议,这样才启用加密和认证机制。

鱼叉式攻击和水坑攻击

鱼叉式攻击(Spearphishing)是一种针对特定目标进行的网络钓鱼攻击。与普通的钓鱼攻击相比,鱼叉式攻击更加针对性强,攻击者往往经过精心策划和准备,伪装成合法的邮件、网站、文档等,针对目标对象进行诱骗,以获取目标对象的敏感信息,如用户名、密码、信用卡信息等。
鱼叉式攻击通常分为以下几个步骤:

  1. 确定攻击目标:攻击者通常需要确定目标对象,可能是某个公司、组织或个人的敏感信息。
  2. 收集情报:攻击者需要收集目标对象的敏感信息,如电子邮件地址、电话号码、社交媒体账号等,以便进行针对性的攻击。
  3. 制定攻击计划:攻击者根据目标对象和收集到的情报,制定攻击计划,包括选择合适的诱骗方式、构造诱骗信息等。
  4. 发送诱骗信息:攻击者通过电子邮件、短信、社交媒体等方式向目标对象发送诱骗信息,诱导其泄露敏感信息。
  5. 获取敏感信息:一旦目标对象上当,攻击者就可以获取到目标对象的敏感信息,如用户名、密码、信用卡信息等。
    水坑攻击(Watering Hole Attack)是一种利用目标对象经常访问的网站漏洞,进行隐蔽性攻击的网络攻击方式。攻击者通常会选择一些热门的网站,如水坑论坛、开源项目等,利用这些网站的漏洞,注入恶意代码,等待目标对象访问这些网站时,实施攻击。
    水坑攻击通常分为以下几个步骤:
  6. 确定攻击目标:攻击者需要确定目标对象,可能是某个公司、组织或个人的敏感信息。
  7. 选择攻击网站:攻击者选择一些热门的网站,如水坑论坛、开源项目等,作为攻击目标。
  8. 利用漏洞注入恶意代码:攻击者利用网站漏洞,注入恶意代码,例如 iframe、JavaScript 等,以便实施攻击。
  9. 等待目标对象访问:攻击者等待目标对象访问攻击网站,触发恶意代码,实施攻击。
  10. 获取敏感信息:一旦目标对象访问攻击网站,攻击者就可以通过恶意代码,获取目标对象的敏感信息,如用户名、密码、信用卡信息等。

什么是虚拟机逃逸?

虚拟机逃逸(Virtual Machine Escape)是指攻击者利用虚拟机(Virtual Machine,简称 VM)的安全漏洞,从虚拟机中逃逸到宿主机(Host Machine)或者其他虚拟机上,从而实现对宿主机或者其他虚拟机的攻击和控制。虚拟机逃逸是虚拟化安全领域的一个严重威胁,可能对企业的网络安全造成重大影响。
虚拟机逃逸的原理:
虚拟机是由虚拟化软件(如 VMware、VirtualBox 等)创建的虚拟化环境。虚拟机逃逸的原理在于攻击者通过渗透虚拟化软件或者虚拟机的安全漏洞,获取到虚拟机的高级权限,从而实现对虚拟机的控制。进一步,攻击者可以利用虚拟机的高级权限,对宿主机或其他虚拟机进行攻击和控制。
虚拟机逃逸的攻击手段:

  1. 漏洞利用:攻击者利用虚拟化软件或者虚拟机的安全漏洞,实施漏洞利用,获取虚拟机的高级权限。
  2. 暴力破解:攻击者通过暴力破解虚拟机的密码,获取虚拟机的高级权限。
  3. 社会工程学攻击:攻击者利用虚拟机的用户疏忽或者不正确的配置,通过社会工程学手段,获取虚拟机的高级权限。
    虚拟机逃逸的防范措施:
  4. 及时更新虚拟化软件和虚拟机:及时更新虚拟化软件和虚拟机,修复已知的安全漏洞。
  5. 使用强密码:使用复杂的、不易猜测的密码,确保虚拟机的密码安全性。
  6. 配置安全策略:对虚拟机进行安全策略配置,限制虚拟机的网络访问权限,避免虚拟机逃逸造成的危害。
  7. 使用虚拟化安全产品:使用专业的虚拟化安全产品,对虚拟化环境进行安全监控和防护。

了解过websocket吗?

WebSocket 是一种双向通信协议,它允许在浏览器和服务器之间进行实时通信。与 HTTP 协议不同的是,WebSocket 通信是持久的,即在客户端和服务器之间建立一个持久的连接,可以在连接期间进行多次消息传递,而不需要重新建立连接。
WebSocket 通信可以通过 JavaScript 在浏览器端实现,也可以通过各种编程语言(如 Python、Java、C# 等)在服务器端实现。在 WebSocket 通信中,客户端和服务器需要协商使用哪种协议,例如,客户端可以发送一个 WebSocket 握手请求,服务器则回复确认连接请求,从而建立一个 WebSocket 连接。
WebSocket 协议有很多优点,例如,可以减少服务器的负载,提高通信效率,允许在浏览器和服务器之间进行实时通信等。因此,WebSocket 协议在实时应用中得到了广泛的应用,例如,在实时聊天、实时股票报价、实时体育直播等领域。

land攻击是什么?

LAND攻击(Local Area Network Denial)是一种会导致目标计算机或网络设备崩溃的拒绝服务攻击。
该攻击的原理是:

  • 攻击者构造一个特殊的数据包,源IP和目的IP相同,源端口和目的端口也相同。
  • 这种数据包称为LAND攻击数据包。
  • 当受害计算机或网络设备收到这个数据包时,会进入一个死循环状态。
  • 设备会重复地回复自己并查找请求的源,直到耗尽资源崩溃。
    LAND攻击不需要大量数据包就可以实现,但也仅针对少数老旧系统才会有效。当前主流操作系统和网络设备已经对此种攻击方法免疫。
    防范LAND攻击的方法有:
  • 更新操作系统、网络设备固件补丁至最新版本
  • 过滤LAND数据包
  • 限制源IP和目的IP不能相同
  • 启用SYN Cookie以防止SYN洪泛攻击
    所以,LAND攻击现在威胁并不大,关键是及时更新补丁,进行必要的网络数据包过滤。

你会如何进行信息收集?

在信息安全领域,进行信息收集也称为信息侦察,主要可以通过以下几种方式:

  1. 搜索引擎侦察
    通过Google、Bing等搜索引擎,使用特定语法和操作符来搜集关于目标网站或组织的公开信息。
  2. 社交工程学
    通过社交网络、WHOIS信息等来搜集目标组织和员工的背景信息。
  3. 网站网页源代码审计
    检视网站前端源代码中的注释、元数据等信息,寻找有用信息。
  4. 网络扫描
    使用Nmap、Masscan等进行端口扫描、服务探测、系统指纹识别等,获取目标网络信息。
  5. 域名信息挖掘
    通过WHOIS、DNS记录等分析域名注册信息和解析记录。
  6. 证书透明度日志
    通过证书透明度项目日志分析目标HTTPS流量和证书信息。
  7. 网络嗅探
    使用抓包工具在合法范围内嗅探网络流量,进行协议解析分析。

什么是CRLF注入攻击?

CRLF注入攻击(CRLF Injection)是一种通过插入回车和换行字符来实现的注入攻击。
主要的攻击原理是:

  • 攻击者在用户可控参数中插入回车符CR(\r)和换行符LF(\n)。
  • 目标应用将这些不可见字符与参数一起解释执行。
  • 这样可以欺骗应用,实现HTTP头注入、日志注入、XSS等攻击效果。
    防范CRLF注入攻击的方法:
  • 对用户输入的参数进行校验,过滤非法字符。
  • 对危险的字符如CRLF进行转换编码。
  • 使用parameterized queries或prepared statements。
  • 禁用危险的HTTP头。
  • 控制错误信息的展示。
  • 通过WAF检测防护CRLF注入。
    开发人员需要提高警惕,在代码中对用户输入和输出数据进行足够检查,避免CRLF注入漏洞。

防止XSS,前端后端两个角度?

防止跨站脚本攻击(Cross-Site Scripting,XSS)是保护Web应用程序安全的关键措施之一。XSS攻击发生在攻击者向应用程序注入恶意脚本代码,然后在用户的浏览器中执行这些代码,从而可能导致信息泄露、会话劫持等安全问题。从前端和后端两个角度来防止XSS攻击,可以采取以下措施:

前端防御措施:

  1. 输入验证和过滤: 在前端对用户输入的数据进行验证和过滤,限制只允许特定类型的数据输入。可以使用正则表达式或验证库来确保输入的数据符合预期。
  2. 转义输出: 在将用户输入的数据插入到HTML、CSS或JavaScript代码中之前,将其进行适当的转义。这可以防止恶意代码被执行。常见的转义包括将 < 替换为 <> 替换为 > 等。
  3. CSP(内容安全策略): 使用CSP,可以定义哪些资源可以加载到页面中,从而限制可以执行的脚本来源。这有助于减少受信任的域外脚本的执行。
  4. 使用安全框架和库: 使用诸如React、Angular、Vue等框架可以帮助防止XSS攻击。这些框架在渲染过程中会自动处理数据的转义和安全性。
    后端防御措施:
  5. 输入验证和过滤: 在后端对接收到的所有用户输入进行严格的验证和过滤。不信任任何输入,确保它们符合预期的格式和内容。
  6. 输出编码: 在将数据返回给前端之前,确保对数据进行适当的编码。这有助于防止在页面上执行恶意脚本。
  7. 使用模板引擎: 如果应用程序使用模板引擎来生成动态内容,确保模板引擎会自动进行输出编码,以防止XSS攻击。
  8. HTTP-Only 和 Secure Cookies: 将敏感信息存储在HTTP-Only和Secure标志的cookie中,这些cookie不容易被XSS攻击盗取。
  9. 内容安全策略(CSP): 在HTTP响应头中使用CSP策略,限制页面可以加载的内容,以减少XSS攻击的潜在影响。
  10. 输出长度限制: 在后端对数据的输出长度进行限制,以防止长字符串攻击。
    综合使用前端和后端的防御措施,可以最大程度地减少XSS攻击的风险。然而,请注意,安全是一个持续的过程,新的漏洞和攻击方式可能随时出现,因此定期审查和更新安全措施非常重要。

如何防护一个端口的安全?

为了提高一个网络端口的安全性,可以从以下几个方面进行防护:

  1. 限制端口访问
    通过防火墙规则和ACL访问控制列表,只允许可信IP或地址段访问该端口。
  2. 更改默认端口
    不使用默认端口,设置为不常用的高位端口,提高隐蔽性。
  3. 端口安全扫描
    使用端口扫描工具检查端口服务以发现安全漏洞。
  4. 服务验证
    对访问端口的服务进行身份验证,如SSL证书验证、basic auth等。
  5. 数据加密
    使用加密传输协议如SSL/TLS保护端口通信的数据。
  6. 日志审计
    开启日志记录,审计端口访问活动以发现异常。
  7. 关闭不必要服务
    如果端口服务不必要,关闭该端口服务。
  8. 更新服务软件
    对端口运行的服务进行及时的软件安全更新。
  9. 使用防火墙和IPS
    使用防火墙、入侵防御系统监控和过滤端口流量。

谈一谈Windows系统与Linux系统提权的思路?

提权是指在计算机系统中获取更高权限的过程。在Windows和Linux系统中,提权的思路有很多,下面是一些常见的方法。
在Windows系统中,提权的常见方法包括:

  • 利用操作系统漏洞:可以通过查找未修补的漏洞,然后使用相应的EXP来进行提权。
  • 利用第三方服务漏洞:例如数据库提权,可以通过获取数据库管理员账号的密码来进行提权。
  • 使用Windows提权辅助工具:例如Windows-Exploit-Suggester,它可以通过比对systeminfo生成的文件,从而发现系统是否存在未修复漏洞。
    在Linux系统中,提权的常见方法包括:
  • 利用内核漏洞:可以通过查询目标操作系统的内核版本号,然后查找对应的能提权的漏洞。
  • 利用SUID程序:SUID程序是一种特殊的程序,它可以让普通用户以root用户的身份运行。如果SUID程序存在漏洞,那么就可以被利用来进行提权。
  • 利用sudo权限:如果普通用户被授予了sudo权限,那么就可以使用sudo命令来以root用户的身份运行命令。

防范常见的 Web 攻击

防范常见的 Web 攻击可以从以下几个方面进行:

  1. 加强Web服务器安全配置
  • 使用最新版本的Web服务器软件,并及时打补丁和更新
  • 禁用不必要的服务、端口和目录列表
  • 限制和隔离Web服务器的文件系统访问权限
  • 启用Web服务器日志并定期审计日志
  1. 采用Web应用防火墙(WAF)
  • 可检测和阻止常见的Web攻击如SQL注入、XSS、CSRF等
  • 基于规则的检测和阻止已知攻击
  • 基于行为分析检测未知威胁和异常访问
  1. 强化网站代码安全
  • 进行代码安全审计,发现并修复代码中的漏洞
  • 使用安全编程技术,避免引入新漏洞
  • 过滤和验证所有用户输入,防止注入攻击
  1. 启用HTTPS
  • 使用HTTPS加密网站访问,防止流量劫持和篡改
  1. 限制用户输入
  • 对特殊字符、长度、格式进行过滤和检查
  • 避免直接在页面显示用户输入的内容
  1. 数据备份和灾难恢复
  • 定期备份Web服务器数据和文件
  • 制定灾难恢复计划,能快速响应和恢复

回答Cookies 和 session 区别

Cookies 和 Session 的主要区别如下:
1.存储位置不同

  • Cookies存储在客户端(浏览器)中,Session存储在服务器上。
    2.安全性不同
  • Cookies信息保存在客户端中,容易被拦截或篡改。Session存储在服务器上更安全。
    3.存储内容不同
  • Cookies可以存储关键信息如用户名、密码等。Session只存储一个会话ID,不存储用户数据。
    4.持久性不同
  • Cookies可以设置过期时间,PAN 终止后依然存在。Session会话结束后即被清除。
    5.目的不同
  • Cookies主要用于跟踪用户行为,个性化设置等。Session主要用于保存用户登录状态。
    6.支持客户端数量
  • Cookies可以支持多个客户端访问。Session由于存储在服务器上,仅能支持单个客户端。
    7.传输机制不同
  • Cookies通过HTTP头部传输。Session通过cookies传递会话ID。
    总的来说,Cookies和Session都用于跟踪用户状态,但原理和使用场景有所不同。Cookies适合小量关键信息存储在客户端,Session适合在服务器端维护用户登录状态。两者可以配合使用,以发挥各自的优势。

GET 和 POST 的区别

GET和POST都是HTTP协议中的请求方法,两者的主要区别有:

  1. 请求参数的传输方式不同:
  • GET通过URL传递参数,参数直接暴露在URL中。
  • POST通过请求body传递参数,参数不会暴露。
  1. 传输数据大小的限制不同:
  • GET传输的数据量较小。
  • POST传输的数据量较大,理论上没有大小限制。
  1. 参数的类型支持不同:
  • GET只支持ASCII字符的请求参数。
  • POST支持不同格式的参数,包括二进制数据。
  1. 参数对缓存的影响不同:
  • GET请求会被浏览器缓存。
  • POST请求不会被缓存。
  1. 安全性不同:
  • GET相对不太安全, parameters直接暴露在URL上。
  • POST相对更安全,可以防止参数被残留在浏览器历史记录中。
  1. 幂等性不同:
  • GET请求是幂等的,可以重复执行同样的GET请求。
  • POST请求不是幂等的,重复执行可能产生副作用。
  1. 用于场景不同:
  • GET更适合信息获取,不产生副作用。
  • POST更适合修改服务器端资源,可能产生副作用。
    总之,GET更适合读取信息,POST更适合写入修改信息,开发时根据需求选择合适的HTTP请求方法。

URI 和 URL 的区别

URI 和 URL 的区别简述如下:

  • URI(Uniform Resource Identifier)统一资源标识符,是对网络资源的唯一标识,可以唯一标识一个资源。
  • URL(Uniform Resource Locator)统一资源定位符,是一种具体的URI,用于标识一个网络资源的位置。URL是URI的子集。
    两者的主要区别:
  1. 作用不同
  • URI用于标识一个资源,URL用于表示资源的地点。
  1. 格式不同
  • URI只包含资源的标识,并不指定获取资源的方法。
  • URL包含访问资源的方式,一般由三部分组成:资源访问协议+域名+资源文件名。
  1. 示例不同
  • URI示例:mailto://[email protected] (邮件地址)
  • URL示例:http://www.example.com/index.html (链接到网页)
  1. 使用范围不同
  • URI泛指各种标识符,可以是URL也可以是URN等。
  • URL更具体,通常是HTTP协议资源的URI。

你可能感兴趣的:(网络安全,web安全,网络,安全,xss,csrf,ssrf,land)