【JAVA架构师成长之路】【持久层】第5集:PreparedStatement防SQL注入
课程标题:PreparedStatement防SQL注入——20分钟掌握安全数据库操作
目标:深入理解SQL注入原理,掌握PreparedStatement防御机制,提升数据库操作安全性
0-2分钟:SQL注入问题引入
场景:用户登录功能,输入用户名和密码,后端拼接SQL查询。
漏洞代码示例:
String username = request.getParameter("username");
String password = request.getParameter("password");
String sql = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
攻击示例:输入' OR '1'='1
作为密码,SQL变为:
SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1' -- 绕过密码验证
2-5分钟:PreparedStatement基础用法
解决方案:使用参数化查询替代字符串拼接。
代码改造:
String sql = "SELECT * FROM users WHERE username=? AND password=?";
PreparedStatement ps = conn.prepareStatement