权限控制
越权访问漏洞
越权访问(Broken Access Control, 简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。
越权访问漏铜防范措施
1. 前后端同时对用户输入信息进行校验,双重验证机制
2. 调用功能前,验证用户是否有权限调用相关功能
3. 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4. 直接对象引用的资源ID要加密,防止攻击者枚举ID,敏感数据特殊化处理
5. 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
水平越权访问漏洞
水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时,没有判断数据的所有人/所属部门而导致的越权数据访问漏洞。
(小声bb)在执行select语句时,如果是用户A访问数据,那么只返回在table中A可以看到的行。怎么确定哪些行A可以看到呢?这个视具体业务逻辑来定。比如,可以存储行的所有者,如果所有者是A,或者包括A,那么A就可以访问。也可以存储行的访问级别,然后和A的访问级别进行比较,如果A的级别更高或平等,就可以访问。
敏感数据处理规约
敏感数据处理
- 特殊信息授权
- 特殊信息脱敏(身份证号,手机号,卡号,客户)
- 特殊信息加密存取
- 特殊信息加密传输
数据脱敏的重要原则
- 保持原有数据特征(原来多少位,脱敏了还得是多少位)
- 保持数据之间的一致性(不能有的地方脱敏前三位,有的地方脱敏后三位)
- 保持业务规则的关联性
- 多次脱敏之间的数据一致性(不能不同场合脱敏同一个数据,结果却不一样)
脱敏方式:前端展示脱敏;日志脱敏。
加密方式:通过MyBatis的ParameterHandler和ResultHanler进行加密解密;通过Spring的Filter添加加解密的Filter。
SQL注入攻击防御
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。动态生成SQL语句时没有对用户输入的数据进行验证是SQL注入攻击得逞的主要原因。
SQL注入常用防御手段:
- 过滤危险字符
- 使用预编译语句:JDBC PreparedStatement
- 参数化查询:Hibernate、Mybatis
Mybatis框架SQL注入漏洞场景
- 使用$直接拼接
- 模糊查询like后的参数
- in之后的参数
- order by之后
credit:截图均来自Joel老师的PPT