025_jdbc-mysql-Statement的sql注入问题
生活随笔
收集整理的這篇文章主要介紹了
025_jdbc-mysql-Statement的sql注入问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 新建一個JDBCStatementProblem工程, 使用我們之前的JDBCUtil.java和jdbc.properties屬性文件, 以及UserDao
2. 修改UserDaoImpl.java
package com.lywgames.dao.impl;import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.lywgames.dao.UserDao; import com.lywgames.util.JDBCUtil;public class UserDaoImpl implements UserDao {public void login(String username, String password) {Connection conn = null; Statement st = null;ResultSet rs = null;try {// 1.獲取連接對象conn = JDBCUtil.getConn(); // 2.創建statement, 跟數據庫打交道, 一定需要這個對象st = conn.createStatement();// 3.執行查詢sql, 獲取ResultSet結果集String sql = "select * from user where username='"+ username +"' and password='"+ password +"'";System.out.println(sql);rs = st.executeQuery(sql);// 4.使用ResultSet結果集遍歷if(rs.next()){System.out.println("登錄成功");}else{System.out.println("登錄失敗");}} catch (SQLException e) {e.printStackTrace();} finally {// 5.釋放資源JDBCUtil.release(conn, st, rs);}} }3. 輸入任意用戶名和密碼, 在密碼處拼接1=1, 運行程序, 居然登錄成功了。
4. Statement執行, 其實是拼接sql語句的。 先拼接sql語句, 然后在一起執行。如果變量里面帶有了數據庫的關鍵字, 那么一并認為是關鍵字, 不認為是普通的字符串。?這里拼接 or 1=1, 永遠為真, 返回登錄成功。
總結
以上是生活随笔為你收集整理的025_jdbc-mysql-Statement的sql注入问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 024_jdbc-mysql的Dao模式
- 下一篇: 026_jdbc-mysql-Prepa