一、前端安全
不要将后台api直接暴露在前端页面里。而是通过前端服务器将关键参数进行混淆加密。
1. 加密参数
对关键参数进行加密,可以把多个参数再结合时间戳进行加密,保证即使明文不变密文也是在不断变化的
2. 混淆参数
前端多传递一些参数,随机参数个数,随机参数内容,以起到混淆的作用(后端不必接收这些参数)
举例:
比如,前端页面里的投票api不应该是:
POST: /v1/ballot
{
X-UserID: 11111,
vote_id: 8,
candidate_id: 325,
weight: 5
}
而是应该由前端服务器生成:
POST: /v1/ballot
{
arg_1: w7wj38sjw02k8eej5, // 有效参数
arg_2: d83dkssk93jj3 // 随机参数
............... // 随机参数
arg_n: dkd83j9wkj38as // 随机参数
}
有n个参数,但是实际有效的只有一个(这个一个有效的参数就已经包含了明文的所有参数),其它都是随机生成的。
二、链路安全
1. 服务器之间的链路安全
集群内网
2. 前端与服务器之间的链路安全
https
3. 前端授信
可以采用下发token(随机码)的方式
三、监控系统
监控系统包括四个部分,分别是防火墙、监察中心、处理中心、警报中心,整体处理流程如下图所示。
1. 防火墙
请求进来之后,首先经过防火墙,直接过滤掉非法请求。非法请求包括:很频繁的请求;已经被加入到黑名单中用户,设备,ip。
将做成一个jar包,可以自由的接入到各个微服务中,实际上是一个aop切面。
功能:
- 频率控制
某个用户、设备、ip的请求频率不能超过多少 - 黑名单
某个用户、设备、ip的请求不允许通过 - 记录请求
将经过防火墙的请求上传到请求队列里
防火墙可以定义自己的请求需要经过哪些监察器(优化:可以在监察器之间采用与或非进行组合)
2. 监察中心
组成部分:任务调度、线程池和监察器
监察中心有一个任务调度中心会读取防火墙中的请求队列,然后从线程池中取一个线程来进行处理,线程带着请求陆续的经过需要的监察器。
如果请求在经过某个监察器时,发现有风险,则调用处理中心的接口上报监察结果。
3. 处理中心
处理中心拿到上报的监察结果后,根据提前预制的处理策略做出不同的反应
白名单设置,对白名单中的微服务或请求不做处理
对外提供api:
- 上报接口
api参数:哪个微服务的请求、哪个请求、监察结果
手动处理接口:
-
限制频率:设置某个用户(设备、ip)使用某个微服务某个接口的频率上限
api参数:哪个微服务的请求、哪个请求、限制对象类型、限制对象id -
加入黑名单:设置某个用户(设备、ip)禁止使用某个微服务某个接口
api参数:哪个微服务的请求、哪个请求、限制对象类型、限制对象id
处理策略设计:
哪个微服务、如果出现了哪些监察结果,采用哪种处理方式
可能出现的监察结果和处理方式:
请求频率异常(通过防火墙控制频率)
4. 警报中心
对外提供api:
- 警报接口
api参数:发送对象、警报方式、警报内容