JDBC的SQL注入漏洞分析和解决

雨点打透心脏的1/2处 2023-10-07 08:40 64阅读 0赞

SQL注入漏洞分析

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly96aGFuZ3h1ZWxpYW5nLmJsb2cuY3Nkbi5uZXQ_size_16_color_FFFFFF_t_70

SQL注入漏洞解决

需要采用PreparedStatement对象解决SQL注入漏洞。这个对象将SQL预先进行编译,使用?作为占位符。?所代表内容是SQL所固定。再次传入变量(包含SQL的关键字)。这个时候也不会识别这些关键字。

  1. public class UserDao {
  2. public boolean login(String username,String password){
  3. Connection conn = null;
  4. PreparedStatement pstmt = null;
  5. ResultSet rs = null;
  6. // 定义一个变量:
  7. boolean flag = false;
  8. try{
  9. // 获得连接:
  10. conn = JDBCUtils.getConnection();
  11. // 编写SQL语句:
  12. String sql = "select * from user where username = ? and password = ?";
  13. // 预编译SQL
  14. pstmt = conn.prepareStatement(sql);
  15. // 设置参数:
  16. pstmt.setString(1, username);
  17. pstmt.setString(2, password);
  18. // 执行SQL语句:
  19. rs = pstmt.executeQuery();
  20. if(rs.next()){
  21. // 说明根据用户名和密码可以查询到这条记录
  22. flag = true;
  23. }
  24. }catch(Exception e){
  25. e.printStackTrace();
  26. }finally{
  27. JDBCUtils.release(rs, pstmt, conn);
  28. }
  29. return flag;
  30. }

发表评论

表情:
评论列表 (有 0 条评论,64人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDBCSQL注入漏洞

    在实现某些业务时,许多SQL语句中的参数都需要通过变量拼接而成,而这些参数大多都是通过用户输入而来,这样就存在了用户恶意输入SQL关键字来影响JDBC中SQL语句的查询。 例