基本网络攻击与防御
基本网络攻击与防御CRF攻击用户访问恶意网站,被恶意网站利用用户信息对用户的信息进行盗取,对用户发送邮件、短信或者转账支付等恶意行为。
1、用户A在访问信任网站B,并进行登录。
2、信任网站B返回给用户A的cookie。
3、用户A在没有退出网站A的情况下,访问恶意网站C。
4、恶意网站C通过用户的cookie访问信任网站A。
相关防御:
将cookie设置为HttpOnly:response.setHeader("Set-Cookie","cookiename=cookievalue;HttpOnly")
增加JWT防盗用机制
通过Referer识别:referer中存储的是请求源地址,如果用户在登录一个银行网站为www.xxxx.com,在恶意网站进行请求时请求源网站为恶意网站地址,后台代码可以对源地址进行判断就可以防止CRF攻击。
XSS漏洞xSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
防范方法:
字符转义:在后端进行处理,因为前端处理还是会被攻击。 ...
HTTP优化策略
HTTP优化策略我们可以从下面这三种优化思路来优化 HTTP/1.1 协议:
尽量避免发送 HTTP 请求;
利用缓存技术(强制缓存、协商缓存)
在需要发送 HTTP 请求时,考虑如何减少请求次数;
减少重定向次数
合并请求,减少了重复发送的 HTTP 头部。
延迟发送请求
减少服务器的 HTTP 响应的数据大小;
无损压缩;
有损压缩;
HTTP接口安全策略
HTTP接口安全策略
通信层面上HTTPS加密传输
在后端内部传输时,敏感数据加密传输
数据加签验签,例如JWT
基于Token机制传输登录用户非敏感数据
关键接口建立nonce防盗用机制
前端携带nonce,提交数据后,服务器端先根据nonstr字符串提取用户环境md5,然后使用相同规则对当前发来的用户特征进行校对,只有用户环境完全没有发生变化的前提下才运行执行该接口
限流机制、黑名单、白名单
数据脱敏放弃规律
数据后端校验
Spring事务
事务 spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的整套流程来执行具体的操作逻辑,正常情况下要通过通知来完成核心功能,但是事务不是通过通知来实现的,而是通过一个TransactionInterceptor,然后调用invoke来实现具体的逻辑
1. 先做准备工作,解析各个方法上事务相关的属性,根据具体的属性来判断是否开始新事务
2. 当需要开启的时候,获取数据库连接,关闭自动提交功能,开起事务
3. 执行具体的sql逻辑操作
4. 在操作过程中,如果执行失败了,那么会通过completeTransactionAfterThrowing来完成事务的回滚操作,回滚的具体逻辑是通过doRollBack方法来实现的,实现的时候也是要先获取连接对象,通过连接对象来回滚
5. 如果执行过程中,没有任何意外情况的发生,那么通过commitTransactionAfterReturning来完成事务的提交操作,提交的具体逻辑是通过doCommit方法来实现的,实现的时候也是要获取连接,通过连接对象来提交
6. 当事务执行完毕之后需要清除相关 ...
epoll、poll 和 select
epoll、poll 和 selectepollepoll 要做的事情,就是管理这些文件描述符。或者用一句话来描述:epoll 就是增删改查文件描述符。epoll 里面有两个关键结构。一个是红黑树,每一个节点都代表了一个文件描述符。另外一个是双向链表,也叫做就绪列表。
epoll 并不是在我发起 epoll 调用的时候才把文件描述符挪到就绪列表的。而是在 epoll 创建之后,不管你有没有发起 epoll_wait 调用,只要文件描述符满足条件了,就会被挪到就绪列表(需要时会复制到用户空间中)。
每一个和 IO 有关的文件描述符都有一个对应的驱动,这个驱动会告诉 epoll 发生了什么。比如说,当有数据发送到网卡的时候,会触发一个中断。借助这个中断,网卡的驱动会告诉 epoll,这里有数据了。而超时也是利用了中断,不过是时钟中断。时钟中断之后,内核会去检查发起 epoll_wait 的线程有没有超时,如果超时了就会唤醒这个线程。调用者就会得到超时响应。
poll 和 select发起 select 调用的时候会传给 select 一堆代表连接的文件描述符,内核会帮你检查这些文件描 ...
微服务治理的手段(二)
微服务治理的手段(二)服务容错常用的手段主要有以下几种。
FailOver:失败自动切换。就是服务消费者发现调用失败或者超时后,自动从可用的服务节点列表总选择下一个节点重新发起调用,也可以设置重试的次数。这种策略要求服务调用的操作必须是幂等的,也就是说无论调用多少次,只要是同一个调用,返回的结果都是相同的,一般适合服务调用是读请求的场景。
FailBack:失败通知。就是服务消费者调用失败或者超时后,不再重试,而是根据失败的详细信息,来决定后续的执行策略。比如对于非幂等的调用场景,如果调用失败后,不能简单地重试,而是应该查询服务端的状态,看调用到底是否实际生效,如果已经生效了就不能再重试了;如果没有生效可以再发起一次调用。
FailCache:失败缓存。就是服务消费者调用失败或者超时后,不立即发起重试,而是隔一段时间后再次尝试发起调用。比如后端服务可能一段时间内都有问题,如果立即发起重试,可能会加剧问题,反而不利于后端服务的恢复。如果隔一段时间待后端节点恢复后,再次发起调用效果会更好。
FailFast:快速失败。就是服务消费者调用一次失败后,不再重试。实际在业务执行时,一般非核心业 ...
微服务治理的手段
微服务治理的手段节点管理1. 注册中心主动摘除机制这种机制要求服务提供者定时的主动向注册中心汇报心跳,注册中心根据服务提供者节点最近一次汇报心跳的时间与上一次汇报心跳时间做比较,如果超出一定时间,就认为服务提供者出现问题,继而把节点从服务列表中摘除,并把最近的可用服务节点列表推送给服务消费者。
2. 服务消费者摘除机制虽然注册中心主动摘除机制可以解决服务提供者节点异常的问题,但如果是因为注册中心与服务提供者之间的网络出现异常,最坏的情况是注册中心会把服务节点全部摘除,导致服务消费者没有可用的服务节点调用,但其实这时候服务提供者本身是正常的。所以,将存活探测机制用在服务消费者这一端更合理,如果服务消费者调用服务提供者节点失败,就将这个节点从内存中保存的可用服务提供者节点列表中移除。
服务节点摘除保护机制
需要根据实际业务的情况,设定一个阈值比例,即使遇到刚才说的这种情况,注册中心也不能摘除超过这个阈值比例的节点。
负载均衡1. 随机算法顾名思义就是从可用的服务节点中随机选取一个节点。一般情况下,随机算法是均匀的,也就是说后端服务节点无论配置好坏,最终得到的调用量都差不多。
2. 轮询 ...
监控微服务调用
监控微服务调用监控对象监控对象可以分为四个层次,由上到下可归纳为:
用户端监控。通常是指业务直接对用户提供的功能的监控。以微博首页 Feed 为例,它向用户提供了聚合关注的所有人的微博并按照时间顺序浏览的功能,对首页 Feed 功能的监控就属于用户端的监控。
接口监控。通常是指业务提供的功能所依赖的具体 RPC 接口的监控。继续以微博首页 Feed 为例,这个功能依赖于用户关注了哪些人的关系服务,每个人发过哪些微博的微博列表服务,以及每条微博具体内容是什么的内容服务,对这几个服务的调用情况的监控就属于接口监控。
资源监控。通常是指某个接口依赖的资源的监控。比如用户关注了哪些人的关系服务使用的是 Redis 来存储关注列表,对 Redis 的监控就属于资源监控。
基础监控。通常是指对服务器本身的健康状况的监控。主要包括 CPU 利用率、内存使用量、I/O 读写量、网卡带宽等。对服务器的基本监控也是必不可少的,因为服务器本身的健康状况也是影响服务本身的一个重要因素,比如服务器本身连接的网络交换机上联带宽被打满,会影响所有部署在这台服务器上的业务。
监控指标
请求量。请求量监控分为两个维 ...
微服务基础
微服务基础概述微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。
单体应用的痛点:
部署效率低下
团队协作开发成本高
系统高可用性差
线上发布变慢
想要解决上面这些问题,服务化的思想也就应运而生。
用通俗的话来讲,服务化就是把传统的单机应用中通过 JAR 包依赖产生的本地方法调用,改造成通过 RPC 接口产生的远程方法调用。
微服务的优势:
服务拆分粒度更细
服务独立部署
服务独立维护
服务治理能力要求高
总结一下,微服务架构下,主要功能模块:
服务间通信:包括服务治理、负载均衡、服务间调用;
服务容错和异常排查:包括流量整形、降级熔断、调用链追踪;
分布式能力建设:包括微服务网关、分布式事务、消息驱动、分布式配置中心。
服务的发布引用最常见的服务发布和引用的方式有三 ...
dubbo
Dubbo简介Dubbo是一个开源的、高性能的、广泛应用的远程过程调用(RPC)框架,用于在Java中构建分布式系统。它最初由阿里巴巴集团开发,并作为Apache Dubbo项目的一部分后来开源。Dubbo通过提供服务通信、负载均衡、容错等框架来简化分布式应用程序的开发,并且支持HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议以及Dubbo2、Triple (兼容 gRPC) 高性能协议。
以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。
Dubbo模块图:
十层模块的作用:
Dubbo 服务治理
以下是与Dubbo相关的一些关键特点和概念:
地址发现
Dubbo 服务发现具备高性能、支持大规模集群、服务级元数据配置等优势,默认提供 Nacos、Zookeeper、Consul 等多种注册中心适配,与 Spring Cloud、Kubernetes Service 模型打通,支持自定义扩展。
负载均衡
Dubbo 默认提供加权随机、加权轮询、最少活跃请求数优先、最 ...