写点什么

Week 11 命题作业

用户头像
Jeremy
关注
发布于: 2020 年 08 月 20 日
Week 11命题作业
  • 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。



高并发导致应用服务器/数据服务器宕机

解决方案

网络层面:多机房部署,同城多机房,异地多活;

硬件层面:提升服务器物理配置,如CPU核数、内存和硬盘大小,网卡的带宽等;

服务熔断和降级:如果下游服务出现大量超时或者异常,对业务影响较小的服务进行熔断和降级;

服务限流:针对上游请求要做好流量控制,防止上游系统被恶意攻击 或者 上游系统因为自身代码不规范出现循环调用,需要对某些系统做好流量控制,避免对用户的请求造成影响;

高并发导致系统性能下降

解决方案

操作系统:优化操作系统参数,选择稳定的操作系统;

组件层面:用【性能较好】的组件 代替 原组件, 或者将原有组件升级为稳定的新版本;

虚拟机层面:选择合适的JVM虚拟机垃圾收集器,如 对于【停顿时间敏感】的业务,选择 CMS 或者 G1 这类【并发】收集器,并且可以适当扩大【新生代】的大小,保证垃圾对象在新生代就被回收,减少GC次数;

架构层面: 服务拆分,将单体应用拆分为多个微服务;对于【读多写少】场景,采用【分布式缓存】提升读性能,对于【写多】场景,将数据库进行分片,或者使用【消费队列】,降低数据库压力;

WEB攻击

黑客或者一些恶意用户,使用WEB攻击手段造成系统不可用;

XSS攻击

跨站脚本攻击,XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。

提交的数据包含攻击脚本,用户提交的请求中不能包含可执行的脚本;

对HTML的特殊字符如 "<", ">" 等进行转义;

SQL注入攻击

获取数据库表结构信息的手段:

开源:采用开源软件搭建软件,如Discuz!,网站数据结构是公开的,攻击者可以直接获得;

错误回显:网站开启错误回显,攻击者故意构造非法参数;不能把异常直接返回给用户;

盲注:网站关闭错误回显,攻击者根据页面变化情况判断SQL语句的执行情况;

防攻击手段

正则匹配:对SQL操作的关键字进行 正则或标记;

SQL预编译参数绑定;

CSRF攻击

防攻击手段

表单Token;

验证码;

Referer Check;

网关统一拦截

WEB应用防火墙,如开源的ModSecurity



  • 请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

public class BCryptDemo {
public static void main(String[] args) {
  // Hash a password for the first time
    String password = "testpassword";
    String hashed = BCrypt.hashpw(password, BCrypt.gensalt());
    System.out.println(hashed);
  // gensalt's log_rounds parameter determines the complexity
  // the work factor is 2**log_rounds, and the default is 10
  String hashed2 = BCrypt.hashpw(password, BCrypt.gensalt(12));
  // Check that an unencrypted password matches one that has
  // previously been hashed
  String candidate = "testpassword";
  //String candidate = "wrongtestpassword";
  if (BCrypt.checkpw(candidate, hashed))
    System.out.println("It matches");
  else
  System.out.println("It does not match");
  }
}



用户头像

Jeremy

关注

还未添加个人签名 2018.01.21 加入

还未添加个人简介

评论

发布
暂无评论
Week 11命题作业