孤尽训练营打卡日记day24--系统安全规约

前言

        现在是大数据的时代,数据是非常重要的,一张照片就有可能泄漏了你的位置信息。在我们的系统中,安全一直是老生常谈的话题,怎么维护我们的系统安全,在我们日常开发中,怎么避免出现安全问题,我们跟着Joel老师继续学习系统安全规约。

权限控制之越权访问漏洞

越权访问(Broken Access Control,简称 BAC)

        是web程序中一种常见的漏洞,由于其存在范围广、危害大,被 OWASP 列为Web应用十大安全隐患第二名。

垂直越权访问:

        拥有了不属于他的系统权限,比如普通用户拥有了系统管理员的权限,b比如修改金额

水平越权访问:

        是一种“基于数据的访问控制”,设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时,没有判断数据的所属人,所属部门而导致的越权数据访问漏洞。访问了不属于他的数据,比如a用户访问到了b用户的权限

越权访问漏洞防范措施

  • 前后端同时对用户输入信息进行校验,双重验证机制
  • 调用功能前,验证用户是否有权限调用相关功能
  • 执行关键操作时必须验证用户身份,验证用户是否具备操作数据的权限
  • 直接对象引用的资源id要加密,防止攻击者枚举攻击id,敏感数据特殊化处理
  • 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤

敏感数据处理规约

敏感数据处理:

特殊信息授权   => 特殊信息脱敏  => 特殊信息加密存取 => 特殊信息加密传输

信息脱敏

        是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户等个人信息都需要进行数据脱敏

数据脱敏原则

  • 保持原有数据特征
  • 保持数据之间的一致性
  • 保持业务规则的关联性
  • 多次脱敏之间的数据一致性

SQL注入常用防御手段:

  • 过滤危险字符
  • 使用预编译语句 :JDBC、 PrepareStatement
  • 参数化查询:Hibernate、Mybatis
  • Mybatis框架SQL注入漏洞场景

使用 $ 直接拼接

        #{}是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号

       ${} 是字符串替换,在处理是字符串替换,MyBatis在处理时,它会将sql中的{ }替换为变量的值,传入的数据不会加两边加上单引号。

select * 
from user
where id = ${id}

如果 id = 1 or 1=1 则

select * 
from user
where id = 1 or 1 =1

条件永真,所以应该使用 #

select * 
from user
where id = #{id}

模糊查询like后的参数$

select * 
from user
where name like '%${name}%'

name = ' or 1 =1 

select *
from user
where name like '%' or '1=1 %' 

正确写法

1、在代码里拼接 %%
name = "%" + "123" + "%"

select *
from user
where name like #{name}


2、使用concat
select *
from user
where name like concat('%',#{name},'%')

in 之后的参数$

        一样会因为拼接导致SQL永真,正确使用方法使用 foreach

order by 之后$ 同理

其他常见完全问题

XSS跨站点脚本攻击及其防御

        在连接中注入恶意代码

  • 输入过滤单引号,双引号,<>等
  • 编码转换:Html实体编码、JavaScript编码
  • Cookie安全策略:HttpOnly

重放攻击

        接口重复调用

  • 使用Sentinel 实现API防刷

锲而舍之朽木不舍,锲而不舍,金石可镂。

参考文档:Joel老师的ppt

猜你喜欢

转载自blog.csdn.net/qq_35056844/article/details/121413615