网络安全
# https中间人攻击
# 如何防止请求被篡改
- 使用https来进行请求(这点我居然没想到。。)
- 设置客户端白名单,客户端所有请求,请求到代理服务器(nginx),代理服务器维护黑/白名单的ip,决定是否转发请求。项目创建一个filter,拦截所有请求,在filter的方法中,通过request信息匹配ip黑/白名单,和url的拦截规则,决定是否合法。(适合小场景使用,比如系统后台管理系统,或者涉及到钱财的业务)
- 对请求参数进行签名,前端发起http请求,对参数排序,然后使用 参数与私钥拼接,在进行md5加密 等方式,生成一个签名出来,一起发给服务端,服务端这边获取到参数,签名,再使用自己的私钥进行同样方式的加密生成签名,比对签名是否一致。一致则认为合法,不一致则不合法。但是无法防止重复请求攻击!
- 可以缓存每次请求的md5值,或者给每个请求添加uuid+随机数这样一个代表请求序号的标识。然后请求到服务端时,服务端想办法缓存起来起来这个标识,每次请求过来时,判断是否已经请求过。但是缓存怎么实现,如何维护?而且并发量高的话,每个请求过来都先查缓存,是否影响性能。
- 在请求的参数中和签名结果里,加入时间戳这个参数,业务服务器一方面比较签名结果,一方面根据时间戳,来认证请求的合法性,比如允许请求的时间戳与服务器当前时间,存在20秒的误差等自定义规则。超过20秒的合法请求,服务器也不处理,防止恶意的重复请求。
- 时间戳+md5 时间差120s以上代表重复请求,md5写缓存,缓存时长120s(大于等于上面的值就行),判断如果有md5代表重复请求。
如何防止http请求数据被篡改 - 杨健-YJ的个人页面 - OSCHINA - 中文开源技术交流社区 (opens new window)
# TCP SYN攻击
SYN Flood(半开放攻击)是一种拒绝服务(DDoS)攻击,其目的是通过消耗所有可用的服务器资源使服务器不可用于合法流量。通过重复发送初始连接请求(SYN)数据包,攻击者能够压倒目标服务器机器上的所有可用端口,导致目标设备根本不响应合法流量。
SYN Flood攻击如何工作?
通过利用TCP连接的握手过程,SYN Flood攻击工作。在正常情况下,TCP连接显示三个不同的进程以进行连接。
1.首先,客户端向服务器发送SYN数据包,以便启动连接。
2.服务器响应该初始包与SYN / ACK包,以确认通信。
3.最后,客户端返回ACK数据包以确认从服务器接收到的数据包。完成这个数据包发送和接收序列后,TCP连接打开并能发送和接收数据。
为了创建拒绝服务,攻击者利用这样的漏洞,即在接收到初始SYN数据包之后,服务器将用一个或多个SYN / ACK数据包进行响应,并等待握手中的最后一步。这是它的工作原理:
- 攻击者向目标服务器发送大量SYN数据包,通常会使用欺骗性的IP地址。
- 然后,服务器响应每个连接请求,并留下开放端口准备好接收响应。
- 当服务器等待从未到达的最终ACK数据包时,攻击者继续发送更多的SYN数据包。每个新的SYN数据包的到达导致服务器暂时维持新的开放端口连接一段时间,一旦所有可用端口被使用,服务器就无法正常工作。
在网络中,当服务器断开连接但连接另一端的机器没有连接时,连接被认为是半开的。在这种类型的DDoS攻击中,目标服务器不断离开打开的连接,等待每个连接超时,然后端口再次可用。结果是这种攻击可以被认为是“半开攻击”。
SYN洪水发生方式:
直接攻击IP地址不被欺骗的SYN Flood被称为直接攻击。
欺骗性攻击:恶意用户也可以欺骗他们发送的每个SYN数据包上的IP地址,以抑制缓解工作,使其身份更难发现。
分布式攻击(DDoS):如果使用僵尸网络创建攻击,则将攻击溯源到源的可能性很低。
如何减轻SYN洪水攻击?
长期以来已知SYN洪水脆弱性,并且已经采用了许多缓解途径。几种方法包括:
增加积压队列
目标设备上的每个操作系统都具有一定数量的半开放连接。对大量SYN数据包的一个响应是增加操作系统允许的可能半开连接的最大数量。为了成功增加最大积压,系统必须预留额外的内存资源来处理所有新的请求。如果系统没有足够的内存来处理增加的积压队列大小,系统性能将受到负面影响,但仍然可能优于拒绝服务。
回收最早的半开TCP连接
一旦积压已被填补,另一个缓解策略就是覆盖最早的半开式连接。这种策略要求合法连接可以在比可以填充恶意SYN数据包的积压时间更短的时间内完全建立。当攻击量增加时,或者如果积压量太小而不实际,这种特定的防御就会失败。
SYN cookie
这个策略涉及服务器创建一个cookie。为了避免在积压已经被填满的情况下连接丢失的风险,服务器使用SYN-ACK数据包对每个连接请求进行响应,然后从积压中删除SYN请求,从存储器中删除请求并使端口打开,准备建立新的连接。如果连接是合法请求,并且最终的ACK数据包从客户端计算机发送回服务器,则服务器将重建(有一些限制)SYN积压队列条目。尽管这种缓解措施确实丢失了有关TCP连接的一些信息,但是优于允许合法用户因攻击而发生拒绝服务。
什么是SYN Flood攻击? - 知乎 (zhihu.com) (opens new window)
# DNS劫持
DNS劫持(DNS Hijacking):又被称为域名劫持,DNS重定向(DNS direaction),是一种DNS攻击方式。即是DNS查询没有得到正确的解析,以致引导user访问到恶意的网站,从而窃取用户隐私,或者进行某些恶意的操作。
开始正式介绍DNS劫持之前,先与HTTP劫持做一个比较,可能有助于有些同学对下文更容易理解更深入一点。
DNS劫持现象:你输入一个google.com网址,出来的是百度的页面
HTTP劫持现象:访问着github的页面,右下角出现了一个格格不入的广告弹窗