Review:互联网并发与安全

https://yanglinwei.blog.csdn.net/article/details/103913555

高并发系统的三把利器缓存降级限流

  • 缓存 : 目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;
  • 降级 : 是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;
  • 限流 : 有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流。

基于Hystrix实现服务隔离与降级:提供线程池和信号量隔离,以减少不同服务之间资源竞争带来的相互影响,提供优雅降级机制。

  • 基于线程池:优点是使用线程池隔离可以完全隔离第三方应用,请求线程可以快速放回。请求线程可以继续接受新的请求,如果出现问题线程池隔离是独立的不会影响其他应用。当失败的应用再次变得可用时,线程池将清理并可立即恢复,而不需要一个长时间的恢复。独立的线程池提高了并发性。缺点是增加计算开销(CPU)。每个命令的执行涉及到排队、调度和上下文切换都是在一个单独的线程上运行的。
  • 基于信号量:记录当前有多少个线程在运行,当请求进来时先判断计数 器的数值,若超过设置的最大线程个数则拒绝该请求,若不超过则通行,这时候计数器+1,请求返 回成功后计数器-1,与线程池隔离最大不同在于执行依赖代码的线程依然是请求线程 ,信号量的大小可以动态调整, 线程池大小不可以。

限流的解决方案

  • **限流算法:**如:令牌桶、漏桶、计数器
  • 应用层解决
  • 接入层解决(如Nginx):Nginx接入层限流可以使用Nginx自带了两个模块:连接数限流模块ngx_http_limit_conn_module和漏桶算法实现的请求限流模块ngx_http_limit_req_module。 还可以使用OpenResty提供的Lua限流模块lua-resty-limit-traffic进行更复杂的限流场景。
  • 其它(Web前端优化):网站动静分离、JS/CSS压缩技术、CDN(CDN加速意思就是在用户和我们的服务器之间加一个缓存机制,动态获取IP地址根据地理位置,让用户到最近的服务器访问。)

限流算法

  • 计数器:如果计数器的值大于10并且与第一次请求的时间间隔在1分钟内,那么说明请求过多,如果该请求与第一次请求的时间间隔大于1分钟,并且该计数器的值还在限流范围内,那么重置该计数器。
  • 滑动窗口计数器:相对于计数器,解决“临界值”问题。
  • 令牌桶算法:按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求(RateLimiter.create(1.0);rateLimiter.tryAcquire(500, TimeUnit.MILLISECONDS);)
  • 漏桶算法:按照常量固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝

RateLimiter是guava提供的基于令牌桶算法的实现类,可以使用AOP的方式实现限流(注解:@ExtRateLimiter(value = 10.0, timeOut = 500),rateLimiter.tryAcquire(timeOut, TimeUnit.MILLISECONDS))


常见的Web漏洞

  • XSS攻击:使用Javascript脚本注入进行攻击,解决方式:脚本特殊字符,转换成html源代码进行展示。
  • SQL注入攻击:它利用应用程序对用户输入的不正确处理,通过在用户输入中注入恶意的SQL代码,从而执行恶意的数据库查询。解决方式:使用#{}(解析为一个参数占位符),而不要是用${}(纯粹的字符串替换)。
  • HTTP防盗链:A网站有一张图片,被B网站直接通过img标签属性引入,直接盗用A网站图片展示。解决方式:判断http请求头Referer域中的记录来源的值。
  • CSRF(跨站域请求伪造):通过伪装来自受信任用户的请求来利用受信任的网站。解决方式:使用图形验证码 防止机器模拟接口请求攻击,在调用核心业务接口时,比如支付、下单、等接口,最好使用手机短信验证验证或是人脸识别,防止其他用户使用Token伪造请求。
  • API幂等问题:由于重复点击或者网络重发,或者 nginx 重发等情况会导致数据被重复提交。解决方式:采用 token 加 redis。在请求头中,传递令牌参数,每次令牌只能用一次。
  • 忘记密码漏洞:如果验证码数字比较短的话,很容易使用暴力破解方式攻击破。解决方式:使用图形验证码拦截,防止机器模拟。
  • 上传文件漏洞:上传木马文件,直接得到WEBSHELL。文件格式进行校验、文件的权限进行设定,禁止文件下的执行权限。

OAuth2.0:用于授权的标准协议,允许第三方应用程序以受限制的方式访问资源,而无需获取用户的凭证(例如用户名和密码)。流程如下:

  • 第一步:用户同意授权,获取code
  • 第二步:通过code换取网页授权access_token
  • 第三步:刷新access_token(如果需要)
  • 第四步:拉取用户信息(需scope为 snsapi_userinfo)

单向散列加密

  • MD5:是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文
  • MD5加盐:每次保存密码到数据库时,都生成一个随机16位数字,将这16位数字和密码相加再求MD5摘要,然后在摘要中再将这16位数字按规则掺入形成一个48位的字符串。
  • SHA:对任意长度的数据运算生成一个160位的数值;

对称加密:发件人和收件人使用其共同拥有的单个密钥 ,这种密钥既用于加密,也用于解密,叫做机密密钥(也称为对称密钥或会话密钥)。常见的有:

  • DES(数据加密标准):分组式加密,算法源于Lucifer,作为NIST对称式加密标准;64位(有效位56位、校验8位),分组算法
  • 3DES:128位,分组算法
  • IDEA(国际数据加密算法):128位,比DES快,分组算法
  • Blowfish:32-448位,算法公开,分组算法
  • RC4:流密码,密钥长度可变
  • RC5:分组密码,密钥长度可变,最大2048位
  • Rijndael:128位/196位/256位
  • AES(高级加密标准):DES升级版,算法出自Rinjindael

案例:假设Alice和Bob是认识的,两人为了保证通信消息不被其它人截取,预先约定了一个密码,用来加密在他们之间传送的消息,这样即使有人截取了消息没有密码也无法知道消息的内容。由此便实现了机密性。

扫描二维码关注公众号,回复: 17180399 查看本文章

在这里插入图片描述


非对称加密:一个用于加密信息,另一个则用于解密信息。常见的有:

  • RSA
  • Elgamal
  • 背包算法
  • Rabin
  • D-H
  • ECC(椭圆曲线加密算法)

举例:

在这里插入图片描述


HTTPS:简单来讲就是加了安全的HTTP,即HTTP+SSL。与HTTP的区别:

  • HTTPS的服务器需要到CA申请证书,以证明自己服务器的用途;
  • HTTP信息是明文传输,HTTPS信息是密文传输;
  • HTTP与HTTPS的端口不同,一个是80端口,一个是443端口。

HTTPS的几个加密算法

  • 握手的时候使用的非对称加密算法 ,用来加密握手之后的请求和应答;
  • 传输信息的时候使用的对称加密;
  • 保证数据的完整性用的是hash算法(数字签名)。

HTTPS加密过程
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_20042935/article/details/134625789