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