安全编码规范-小羊的记录本

本文详细介绍了安全编码规范,包括安全目标、数据校验以防止SQL注入、OS注入等各类注入攻击,以及敏感数据保护措施。强调了在处理不可信数据时的校验和清理步骤,并提供了防御策略,如参数化查询、输入验证、转码等。此外,还讨论了线程同步、IO操作和反序列化过程中的安全性问题,旨在提升代码的安全性和防止信息泄露。
摘要由CSDN通过智能技术生成

安全编码规范

安全目标

  • 机密性:数据不被非法访问和窃取
  • 完整性:数据完整,未被篡改
  • 可用性:保护资源在需要时可以访问

数据校验

信任域:一个域包含了一个或者多个组件,不同的域有不同的权限,不同域的组件互不信任
信任边界:域之间的边界
不可信数据:来自信任边界外的数据,比如外部输入数据,第三方输入数据。
信任域A和信任域B中间有个信任边界,互相不信任!于对方而言都是不可信的数据。

  • 不可信数据的列表:文件(包括程序的配置文件),注册表,网络,环境变量,命令行,用户输入,用户态数据,进程间通信(管道,消息,共享内存,socket,RPC),函数的参数,全局变量(其他线程可能会改变全局变量)

  • 校验的含义
    校验对象时来自边界之外的不可信数据,防止不可以或对系统造成伤害。比如SQL注入攻击,OS命令注入攻击,目录遍历攻击

  • 数据校验的步骤
    不可信输入->标准化和归一化(把路径的… 符号链接处理&&最简单格式)->输入清理(删除,替换不期望的字符,满足约束)->验证(确保输入格式是符合的)->输出清理(对敏感信息过滤,防止信息泄露)->命令解释器(下面注入攻击会用到)

  • 注入攻击
    SQL注入----命令解释器(RDBMS)
    OS命令注入----命令解释器(OS)
    XML注入----命令解释器(XML解析器)
    上面的----分别用于处理以上的注入攻击,防止注入

SQL注入

  • 定义:未经校验的外部输入要构造SQL语句,导致SQL注入漏洞。攻击者构造恶意输入来改变原本的SQL逻辑或者执行额外的SQL语句。
    比如 用户登录Ycx password123 ,输入Ycx’ or ‘1’='1 也是会登陆成功
  • 危害:绕开检查,业务异常;获取和修改数据库数据,敏感信息泄露或者篡改;修改服务器配置
  • 案例:SQL注入盗取网站的所有用户信息
  • 防御策略:
    1.参数化查询(预编译):使用PreparedStatement,sql语句中的参数使用占位符?来替换(不能解决所有问题)
    2.验证输入:白名单验证参数是否符合类型,大小,长度,格式。黑名单查找是否存在已知的不良字符。
    3.转码:特殊字符转码
    具体实施会将3个策略串联起来防御

案例分析:
MySQL
典型错误:直接在SQL中拼接外部输入
SELECT * FROM db_user WHERE username = ‘Ycx’ AND password= ‘password123’ or ‘1’='1’永远是真
在这里插入图片描述
正确:使用预编译语句,参数化查询将查询逻辑和数据分离,互不干扰。
在这里插入图片描述
Hibernate和上述类似

MyBatis
错误:
用$符号传参,类似拼接方式构造SQL语句
在这里插入图片描述
正确:
用#符号,达到语义逻辑和数据分离的效果
在这里插入图片描述
存储过程
错误:还是拼接
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值