java源代码安全之SQL注入漏洞
首先JAVA中的类方法不像php的函数中有那么多的漏洞。
java源代码安全文章主要是总结一下,学习一下,希望大家多多指教。
Java源代码安全系列文章,将从java本身的函数和三大主流框架的角度去对项目中的类、方法、参数可能存在的漏洞进行实现,方便代码审计中的学习,结合一些半自动化审计工具,发现项目中的安全问题,给出一些关键字方便审计时的直接定位。
MVC请参考我园长师傅的:http://drops.wooyun.org/tips/347
JavaWeb安全系列:http://drops.wooyun.org/author/%E5%9B%AD%E9%95%BF
小弟不才,有建议大家多提一下,多多学习。
在框架和jdk中有很多的SQL查询实现类,拼接查询、占位符查询、参数化绑定查询很多,但是目前大多数框架已尽采用了占位符查询(为了安全同时也为了性能的提升),但是依然有一些开发人员在框架中使用拼接查询,造成了安全问题的产生,给公司带来不可避免的损失。
JAVA JDK中的Statement和PreparedStatement
java.sql.Statement 拼接查询 java.sql.PreparedStatement 预编译查询 java.sql.Connection.prepareCall 调用存储过程 ( 不尽兴过多描述)
1、Statement查询
2、PreparedStatement查询
Spring框架中JDBC查询
org.springframework.jdbc.core.JdbcTemplate jdbc模版类
在Spring框架中有很多的数据库实现类,比如:org.springframework.jdbc.core.JdbcOperations、org.springframework.jdbc.core.PreparedStatementCreatorFactory、org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate、org.springframework.jdbc.core.simple.SimpleJdbcTemplat等等,于是我们只需要去找到实现数据库会话类,通过查询哪些类调用了数据库查询会话类即可。
因为Spring Jdbc中涉及到大量的sql查询类,不一一进行描述说明,大部分还是依赖JdbcTemplate,但是我们一定要知道JdbcTemplate类内部还是根据DataSourceUtils来获取数据库连接的。
Hibernate框架
org.hibernate.SessionFactory 工厂类实例,用来创建Session org.hibernate.Session 查询的Session,一个数据库会话 org.hibernate.Query 查询语句类
避免的标准格式有很多,当我们看到这些方式可以绕过,不排除有二次查询漏洞的产生。
1、参数绑定方式查询
2 、占位符方式查询
3、setParameter()方法
4、setProperties()方法(根占位符区别不大)
在审计过程中我们完全可以依赖Eclipse Search功能来进行定位或搜索我们需要的类、方法或常量变量