【面试突击】Java 项目安全面试实战(下)


欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!

在我后台回复 「资料」 可领取编程高频电子书
在我后台回复「面试」可领取硬核面试笔记

文章导读地址:点击查看文章导读!

感谢你的关注!

CSRF 攻击

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击,攻击者利用用户的登录状态发起未经授权的请求,用于查询用户数据、发起交易等等

攻击者可以利用 XSS 跨站点脚本攻击,获取用户 Cookie,再利用 Postman 发送跨站点伪造请求

CSRF 攻击防护措施:

  • 防止 Cookie 被窃取:将网站的 Cookie 设置 HttpOnly 属性,禁止被恶意的 js 脚本窃取 Cookie 信息
  • 随机 Token:每次返回一个页面给用户时,都生成一个随机 token 附加在页面的隐藏元素中,同时在 Redis 中再存储一份,当发送请求时,附加上随机 Token,验证通过才可以发送请求,这样如果伪造请求,不知道随机 Token 是什么,也就无法伪造了
  • 验证码:页面提交时,使用图形滑动验证码认证,可以避免伪造请求
  • Referer 请求头:Http 请求里有一个 Referer 请求头,带有这个请求的来源,服务端可以验证一下这个请求是不是从自己的页面里来的,如果是的话才执行,否则就拒绝执行

用户上传文件,可能会遭到什么样的黑客攻击

如果我们的网站 允许别人上传文件,那么文件可能是可执行的脚本,可能是病毒文件,其实这个是非常危险的,如果是脚本的话,可能会在服务器执行,搞很多破坏,比如黑客黑掉你的服务器,进行勒索之类的

比如攻击者将自己的文件后缀改为 .jpg、.txt 之后进行上传,但是这个文件其实是病毒文件,通过病毒文件可以连接数据库等等,做许多危害系统的操作

上传文件攻击的防护措施

  • 限制上传文件类型:只能上传指定的文件类型,并且限制文件的大小,还要对文件重命名,不能仅仅靠后缀来判断文件类型,还要通过文件二进制数据开头的 magic number(魔数,用于标识文件类型) 来判断文件类型

    比如 JPEG 的魔数为:FFD8FF,PNG 文件的魔数为:89504E47

  • 压缩上传文件:压缩后,可以破坏原来的文件结构,避免文件在服务器执行

DDoS 攻击

DDoS(Distributed Denial of Service,分布式拒绝服务攻击)是一种网络攻击手段,其目的是通过大量的流量或请求来使目标服务器或网络资源不堪重负,从而导致正常用户无法访问这些资源

简单来说,就是给你的服务器发送大量的请求,导致你的服务器线程资源、网络资源、CPU 资源等等全部被占满,导致其他用户无法正常使用

Dos 攻击是一对一的,攻击者通过一台高性能服务器来拼命地给你的网站发送请求,这个很好解决,通过限制 IP 即可

DDoS 是攻击者控制大量的机器,这些机器都被植入木马给控制了,也就是所谓的 肉鸡,使用大量肉鸡给你的网站发送大量请求,导致网站的服务器瘫痪

DDoS 攻击的防护

个人很难防护,一般都是购买云厂商的安全服务来解决

DDoS 攻击的方式:

  • 基于 SYN Flood 的 DDoS 攻击

主要利用了 TCP 三次握手的特性来攻击,TCP 三次握手流程是(TCP 三次握手详细参考):

1、客户端发送 SYN 请求建立连接

2、服务器收到 SYN 后,返回客户端 SYN+ACK 表示请求接收,等待客户端再次返回 ACK

3、客户端收到服务端发回的 SYN+ACK,返回一个 ACK 给服务端,连接被成功建立

服务端在返回 SYN+ACK 给客户端之后,会给该客户端预留一部分资源,等待与客户端建立连接,那么攻击者就会通过大量机器去和服务端建立连接,但是并不给服务端发送第三次的 ACK,导致服务端建立了大量的半连接在等待列表中,最终资源耗尽

【面试突击】Java 项目安全面试实战(下)_第1张图片

  • 基于 DNS Query Flood 的 DDoS 攻击

这种方式利用DNS(域名系统)服务的特性来消耗目标服务器的资源。这种攻击的基本原理是向目标 DNS 服务器发送大量的 DNS 查询请求,从而占用其带宽和处理能力,导致正常用户无法获得 DNS 解析服务

  • 基于 HTTP Flood 的 DDoS 攻击

这种方式专门针对 Web 服务器的 HTTP 服务。攻击者通过发送大量的 HTTP 请求来消耗服务器的资源,导致正常用户无法访问网站

攻击者通过控制大量肉鸡去给服务器发送大量 HTTP 请求,Web 服务器消耗大量资源对大量 HTTP 请求解析,最终导致 Web 服务器 CPU 过载、内存耗尽、网络带宽打满等情况而瘫痪

比如对于 Nginx 、Tomcat 这两个 Web 服务器来说,都是一个进程启动多个线程来并发处理 HTTP 请求,当 HTTP 请求数量很大,就会导致 Web 服务器瘫痪

你可能感兴趣的:(面试突击,面试,java,安全,CSRF,DDoS,TCP三次握手,文件上传安全)