如何在项目中有效的防止SQL注入

写给需要的人,所有的问题源自我们的不重视。
本章略过“什么是SQL注入”,“如何去利用SQL注入”的讲解,仅讲如何去防御
PS在这里讲的不是Postscript
来自
E序列 技术支持小组
贾少雄(360企业安全) 联合编辑

本项目涉及的技术
ORM框架:Mybatis/Hibernate(HQL)/Spring Data-JPA(JPQL)

目录

  • 事前须知
  • SQL注入的产生
  • PreparedStatement
  • 正则表达式过滤和筛选器

1、 如何新项目设计避免SQL注入?

  • 数据库本身的安全设计
  • JPA与参数化(已鸽,坐等4月15日)

2、老项目修复

  • 2.1 数据库的安全防范与防火墙技术
  • 1.2 技术升级/停用

事前须知


SQL注入的产生

 String sql = new StringBuilder();
sql="select * from user where username="+username;
然后各种append

10年的一个类,E**.java,使用StringBuilder 拼接了一个原生SQL的“HQL”(PS:这没有任何安全上的提升),完全暴力append过去,就在最近我终于知道为什么了,hibernate的insert并不好使,他们就是因为懒而弄了个拼接类,在这里我推荐用保存对象的形式。

尽管这种天才般的想法极大的增加了开发的效率,但依然给我们挖了深坑,给我打开了新世界的大门。

任何拼接的方式都会产生sql注入,sql注入主要产生在查询上


PreparedStatement

            String sql = "select * from user where username=?";
p = connect.prepareStatement(sql);
p.setString(1,payload);
p.executeQuery();

PrepareStatement是一种预编译的Statement对象,通过占位符的方式占位,随后通过Set方法赋值,随后通过execute相关方法执行,效率也更高,尽管避免了普通拼接造成的安全问题,防范了大量的SQL注入。

他做的东西就是转义,将截断转义成其他符号或者空字符串,但是对于一些恶意耗尽资源的查询力不从心,重要的是依然可以绕过……

不同数据库连接的PrepareStatement方法均有出入

1、 如何新项目设计避免SQL注入?

1.1数据库本身的安全设计


数据库是信息安全的最后一道防线,里面存储着金融信息,用户个人信息。都2019年了,CICD技术慢慢的展现自己。(待补)
通过上传代码自动部署测试环境,自动集成。

数据库环境分离设计

因此段没参考任何资料,全凭脑补,如有错误,谬误欢迎各位指出。

数据库应分有:

开发环境库:简易,排除无用数据,直观,更有效防止了弱口令导致的数据泄露,各种花式删库。特点是有sql文件(ddl)和初始化数据来支持简单的测试和新人上手。

测试环境库:用于测试,也无法接触生产数据库,防止数据泄露,多用于黑盒,白盒测试,就算你删了库,被勒索病毒勒索比特币也没什么事,推荐批量生成测试数据来测试。

生产环境库(指生产环境,由1个至多个构成)不再介绍,是重点花式被删库和脱库的对象。

每个环境的数据库用途和数据量均不一样,开发人员的数据较少便于开发,减少搭建问题,测试环境生成部分数据用于测试。然而开发环境也可以用来直接测试,根据情况初始化,使数据干净,便于管理。


数据库加密有如下几种分类

重要字段加密:对关键字段进行加密,在国内,常用的加密方式是MD5,但这并不安全(link王小云博士05年crypto大会提出,09年碰撞算法加强)我并不是说md5就能完美逆向。

MySQL数据库自带加密

加密推荐aes和des,程序设计避免输入弱密码,对强度进行校验。

我本已经写好包括MD5+6的介绍枚举很多种问题
但是请大家参考 owasp数据库审计基准 |
今天是28日,团队召集已经结束
项目时间:2月10日-4月15日

挖坑相关:

Tomcat中间件安全
Weblogic中间件安全
Jboss中间件安全
Apache HTTPD正向代理安全[写完了呢]
Nginx 反向代理安全
JAVA框架的版本升级(全)

【挖坑】2019年JAVA安全总结:SQL注入——新项目的开发与老项目的修复的更多相关文章

  1. Java审计之SQL注入篇

    Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...

  2. Java Filter防止sql注入攻击

    原理,过滤所有请求中含有非法的字符,例如:, & < select delete 等关键字,黑客可以利用这些字符进行注入攻击,原理是后台实现使用拼接字符串,案例:某个网站的登入验证的SQ ...

  3. [代码审计]某租车系统JAVA代码审计[前台sql注入]

    0x00 前言 艰难徘徊这么久,终于迈出第一步,畏畏缩缩是阻碍大多数人前进的绊脚石,共勉. 系统是租车系统,这个系统是Adog师傅之前发在freebuf(http://www.freebuf.com/ ...

  4. java后台防止sql注入的方法

    1.采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可: String sql= "select * from users where usernam ...

  5. 解决 SQL 注入和 XSS 攻击(Node.js 项目中)

    1.SQL 注入 SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令. SQL 注入示例 在登录界面,后端会根 ...

  6. java过滤防止sql注入过滤

    /** * 过滤特殊字符 * @author: Simon * @date: 2017年8月31日 下午1:47:56 * @param str * @return */ public static ...

  7. 管中窥豹——框架下的SQL注入 Java篇

    管中窥豹--框架下的SQL注入 Java篇 背景 SQL注入漏洞应该算是很有年代感的漏洞了,但是现在依然活跃在各大漏洞榜单中,究其原因还是数据和代码的问题. SQL 语句在DBMS系统中作为表达式被解 ...

  8. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  9. 170606、防止sql注入(三)

    SpringMVC利用拦截器防止 SQL注入案例一个简单的PHP登录验证SQL注入 比如一个公司有一个用来管理客户的客户管理系统,在进入后台进行管理的时候需要输入用户名和密码.假设在客户端传给服务器的 ...

随机推荐

  1. VR中运动控制器的传送系统

    创建一个VRPawn 新建一个BluePrint,父类选择Pawn,我们命名为VRPawn,打开它. 添加一个Scene命名为CameraRoot 在CameraRoot节点下添加一个Camera 在 ...

  2. 树莓派配置(一):打开SPI

    1.树莓派默认SPI关闭,在进行编程前需要打开SPI cd /boot/ sudo vi config.txt 将#dtparam=spi=off 改成:dtparam=spi=on 重启 sudo ...

  3. mobile web页面调试方法

    此文已由作者张含会授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 开发过程问题排查 Chrome Emulation关键词:使用方便 模拟各种设备尺寸.像素比.自定义user ...

  4. 小R的棋子

    小R的棋子(dp) 数轴上有 n 个位置可以摆放棋子,标号为1,2,3...n.小 R 现在要在一些位置摆放棋子,每个位置最多摆放一个棋子,摆放棋子的总数没有限制.小 R 不希望他摆放的棋子过于拥挤, ...

  5. linux_下IP、网关、DNS地址配置

    设置Linux网络的方法有两种: 第一种:修改配置文档(需要重启网络配置,永远生效)一.修改IP地址[aeolus@db1 network-scripts]$ vi ifcfg-eth0DEVICE= ...

  6. SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式

    一.定时任务 1.基本概念 按照指定时间执行的程序. 2.使用场景 数据分析 数据清理 系统服务监控 二.同步和异步 1.基本概念 同步调用 程序按照代码顺序依次执行,每一行程序都必须等待上一行程序执 ...

  7. php使用百度地图API

    首先注册百度开发者平台账号,创建应用获取AK 不同的应用功能不同,一定要注意,没有的功能调用会提示APP被禁用 根据开发文档使用 给出例子:百度地图WEB api http://lbsyun.baid ...

  8. Exadata 12.2.1.1.0 Highlights

    突然发现,在中国农历新年的这几年里,Exadata 12.2版本已经发布了. 本起去docs.oracle.com上看看它的新特性,结果发现文档还没有更新: 下面是找到的一些资料,让我们来一睹为快吧: ...

  9. ROS上利用usb_cam读取摄像头图像

    电脑需要有USB3.0的接口 我使用的环境为:Ubuntu16.04LTS ROS版本是kinetic 一.usb_cam驱动的安装 1.创建ROS工作空间 mkdir -p myros/src cd ...

  10. 练习六:斐波那契数列(fibonacci)

    题目:斐波那契数列. 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……. 在数学上,斐波那契数列 ...