龙空技术网

安全技术研究-SQL注入(JAVA代码)

血超级厚的土豆 152

前言:

现时大家对“java连接sql”大概比较着重,小伙伴们都想要知道一些“java连接sql”的相关内容。那么小编同时在网络上网罗了一些有关“java连接sql””的相关知识,希望咱们能喜欢,各位老铁们一起来了解一下吧!

JAVA漏洞代码示例

以下代码中的snippet连接了一个Java应用程序,需要执行一条SQL语句来回收由用户提供的主机。

String query = "SELECT account_number, account_balance FROM customer_data WHERE account_owner_id = " + request.getParameter("id");try {    Statement statement = connection.createStatement( ... );    ResultSet res = statement.executeQuery( query );}

由于SQL查询通过拼接用户输入的id建立查询语句,攻击者就可以通过注入篡改其查询,导致其他用户的数据消失,甚至影响到数据库的真实性。

例如,注入123 or 1=1;-- id字段中,SQL的查询就变为:

SELECT account_number, account_balance FROM customer_data WHERE account_owner_id = 123 OR 1=1;--

这个查询操作将返回所有customer_data表格中的数据,因为 id=123 or 1=1永远为真,且后面的判断代码被注释符”--“注释掉了,不在被执行。

如何防护

Java提供了连接对象数据库的PreparedStatement方法,在大多数数据库技术技术中都支持这项功能。

String custid = request.getParameter("id"); String query = "SELECT account_number, account_balance FROM customer_data WHERE account_owner_id = ?"PreparedStatement pstmt = connection.prepareStatement( query );pstmt.setString( 1, custid); ResultSet results = pstmt.executeQuery( );

标签: #java连接sql