安全规范设计

1.接口安全设计

1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。

说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信

内容、修改他人的订单。

2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。

说明:查看个人手机号码会显示成:158****9119,隐藏中间 4 位,防止隐私泄露。

3. 【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,

禁止字符串拼接 SQL 访问数据库。

4. 【强制】用户请求传入的任何参数必须做有效性验证。

说明:忽略参数校验可能导致:

  • page size 过大导致内存溢出
  • 恶意 order by 导致数据库慢查询
  • 任意重定向
  • SQL 注入
  • 反序列化注入
  • 正则输入源串拒绝服务 ReDoS

说明:Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,

但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。

5. 【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。

6. 【强制】表单、AJAX 提交必须执行 CSRF 安全过滤。

说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在

CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户

不知情情况下对数据库中用户参数进行相应修改。

7. 【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放限制

如数量限制、疲劳度控制、验证码校验,避免被滥刷、资损。

说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其

它用户,并造成短信平台资源浪费。

8. 【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。

9.常用的接口鉴权方式

1.常用auth2

2.非对称加密参数,指定公钥私钥rsa,aes

3.md5参数加密验证

4.常用鉴权方式:鉴权常用字段noce(随机数),timestamp(时间戳),接口权限要明确控制防止串号越权情况.

10.出入参敏感数据处理: 

1)基于整个数据加密  2)单个参数加密 3)回显数据脱敏处理 

11.出入参要满足最少原则.

 按需求封装数据,原则上不允许将数据库实体类对象放回到前端.例如用户密码,身份证等,用户需要什么数据才返回什么数据,减少带宽.不允许使用自增主键传递到前端

12.接口幂等性

 对于用户重复点击,重复操作要保证数据的幂等性.不允许重复操作的接口要增加防重复处理和请求间隔控制

13.接口限流和防攻击设计

常用的限流有令牌桶算法和漏同算法,防攻击的方面有防止跨域请求攻击,黑白名单控制,请求失效控制

14.接口单一职责原则:
  

接口要满足单一职责原则,原则上不允许一个controller处理多种不同模块不同业务的方法

15.接口隔离型设计: 

 消费者端和管理端的接口要分离和权限控制,不要在代码上保留着只有管理端才有权限的接口,原则上一些不允许修改,删除功能的接口,控制层和服务层不允许包含这些操作的功能接口或方法

16.负载均衡和故障转移
 常见的有nignx负载均衡和spring cloud中ribbon和feign的负载均衡策略,熔断机制

2.敏感数据处理

1.传输加密,脱敏处理

2.数据库数据加密

3.配置文件的加密

3.并发场景和漏洞考虑

1.线程安全问题
  spring 默认bean的作用域为单例模式,要考虑全局变量的线程安全问题,静态类单例模式的安全问题

2.缓存雪崩和缓存穿透

  空值控制和双检锁的解决方案

3.SQL防攻击

4.分布式锁和分布式事务

5.分库分表,读写分离

6.数据序列化问题

7.引用第三方工具类和jar包的漏洞和风险考虑,例如阿里巴巴fastJson远程执行代码漏洞问题

8.异常的抛出,要处理返回值,避免暴露tomcat的版本,异常的代码行数,SQL错误的语句等信息给前端,防止被黑客攻击

4.代码bug的避免

1.异常的考虑
  尤其是引用类型的空指针异常问题,例如取对象中的值,条件比较重的取值和判断顺序问题

2.死锁和死循环的场景
  注意循环条件的变化情况,注意锁竞争互斥锁等情况

3.边界值的检查
  注意循环中最大值和最小值的测试,避免逻辑偏差(idea 断点处右键,可以设置条件的debug,例如i==0或i==最大值,只有满足条件,断点才生效)

4.单元测试
  接口方法测试,mock请求测试,断言检查

5.白盒子测试
   注意代码执行流程中的条件覆盖和语句覆盖(idea调试模式,ALT+F8打开调试窗口,可以通过执行代码修改变量等来检查逻辑)

6.隐性异常的考虑
  例如请求第三方接口,请求超时等,调用方法中没有显性的异常抛出让调用方捕获处理的情况

7.接口响应时间控制
  避免出现请求超时响应时间过慢的问题,能拆分接口就拆分,加缓存,调整设计等

5.数据库查询安全设计

1.数据库查询注意使用like模糊查询时,关键字携带_(下划线)造成的越权攻击.

例如部门权限控制,查询部门权限通过组织树的ID来查询,例如1.4.44来模糊匹配,如果ID允许用户输入,用户输入带下划线,则匹配就会匹配到其他权限的结果,例如1.4._4,就会匹配1.4.44,1.54等结果

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心情加密语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值