首先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查询

图片 1.png

图片 2.png

图片 3.png

2、PreparedStatement查询

图片 4.png

图片 5.png

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来获取数据库连接的。

图片 6.png

图片 7.png

图片 8.png

Hibernate框架

org.hibernate.SessionFactory   工厂类实例,用来创建Session org.hibernate.Session    查询的Session,一个数据库会话 org.hibernate.Query    查询语句类

图片 9.png

图片 10.png

图片 11.png

避免的标准格式有很多,当我们看到这些方式可以绕过,不排除有二次查询漏洞的产生。
1、参数绑定方式查询
2 、占位符方式查询
3、setParameter()方法
4、setProperties()方法(根占位符区别不大)

在审计过程中我们完全可以依赖Eclipse Search功能来进行定位或搜索我们需要的类、方法或常量变量

图片 12.png