

机密性(Confientiality):确保信息只被预期的读者访问
完整性(Integrity):防止未授权的创建,修改和删除
可用性(Availability):当用户需要访问API时,API总是可用的
欺骗(Spoofing):伪装成某人
干预(Tampering):将不希望被修改的数据、消息或设置改掉
否认(Repudiation):拒绝承认做过的事
信息泄露(Information disclosure):将你希望保密的信息披露出来
拒绝服务(Denial of service):阻止用户访问信息和服务
越权(Elevation ofprivilege):做了你不希望他能做的事
认证=>欺骗:确保你的用户或客户端真的是他(它)们自己
授权=>信息泄漏/干预/越权:确保每个针对API的访问都是经过授权的
审计=>否认:确保所有的操作都被记录,以便追溯和监控
流控=>拒绝服务:防止用户请求淹没你的API
加密=>信息泄漏:确保出入API的数据是私密的
OWASP:开放网络应用程序安全项目
OWASP十大漏洞:有助于保护代码免受软件安全漏洞的影响
注入攻击:跨站脚本攻击(XSS)、SQL 注入攻击、头部注入攻击、日志注入攻击和全路径暴露
SQL注入攻击防护:入参校验、控制数据库用户权限、使用数据库操作框架(Spring Data Jpa、Mybatis)

1、流控

流控方式分别有单机限流和集群限流,限流实现见限流实现详解
1)为什么需要流控
2)为什么流控排在认证、审计和授权前面
越早把一些请求(指非正常请求)拒绝掉,资源浪费越少,越能处理更多请求
2、认证(初步了解)

登录与认证的区别:登录(一次请求)、认证(每次请求)
HttpBasic认证(不够安全)

3、数据校验
接口层面:注解(@NotNull、@NotEmpty、@NotBlank等)
数据库层面:字段设置非空
为什么有接口层面校验还需要进行数据库层面校验
因为业务逻辑处理可能出现空值
4、数据加密
5、HTTPS访问
6、审计

授权之前:被授权拒绝的请求响应可以被记录下来
认证之后:才能知道请求是谁发出来的

日志:持久化
实现日志记录:
7、授权

访问控制:
8、登录
Filter过滤器实现简单登录存在的问题:
1)保持登录的方法


2)常见的登录攻击及防护

- //请求不存在session则返回空
- HttpSession session = request.getSession(false);
- if(session != null) {
- //使session失效防止用户使用黑客的session cookie进行登录
- session.invalidate();
- }
- //生成新的session
- request.getSession(true).setAttribute("user", user);