java代码审计code_java代码审计入门-SQL注入

66b39cefea89699334f2cf28c29bb452.gif

66b39cefea89699334f2cf28c29bb452.gif

来看一下代码,首先看statement的,当然现在已经几乎没人用了,首先这里使用拼接语句,直接将id带入查询而Statement每次执行sql语句都是进行编译导致的产生

//接受传参//接受传参String id=request.getParameter("id");//链接数据库Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/codeaudit","root","root");Statement statement=conn.createStatement();//执行SQL语句ResultSet rs=statement.executeQuery("select * from news where id="+id);//显示内容while(rs.next()){out.print("


"+"
");out.println("ID:"+rs.getString(1)+"
");out.println("标题:"+rs.getString(2)+"
");out.println("内容:"+rs.getString(3)+"
");out.print("
");}

实际结果如下图:

66b39cefea89699334f2cf28c29bb452.gif

下面在说prepareStatement,因为prepareStatement是预编译的并且具有过滤sql注入的功能从而很安全,但是如果是拼接字符串还是会出问题

代码

//接受传参String id=request.getParameter("id");//链接数据库Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/codeaudit","root","root");//执行SQL语句PreparedStatement ps=conn.prepareStatement("select * from news where id=?"+id);ResultSet rs=ps.executeQuery();//显示内容while(rs.next()){out.print("


"+"
");out.println("ID:"+rs.getString(1)+"
");out.println("标题:"+rs.getString(2)+"
");out.println("内容:"+rs.getString(3)+"
");out.print("
");}

测试图:

66b39cefea89699334f2cf28c29bb452.gif

其实PreparedStatement有提供给我们一个(1,999)的方法给我们

//执行SQL语句PreparedStatement ps=conn.prepareStatement("select * from news where id=?");ps.setString(1, id);ResultSet rs=ps.executeQuery();

从而避免了sql注入的产生

66b39cefea89699334f2cf28c29bb452.gif

好在介绍一种在登录出如果使用了拼接字符串的问题

Login.html

账号:

密码:

sql_injection.jsp

String id=request.getParameter("id");String pw=request.getParameter("pw");Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/codeaudit","root","root");PreparedStatement ps=conn.prepareStatement("select * from admin where username='"+id+"' && password='"+pw+"'");ResultSet rs=ps.executeQuery();if(rs.next()){out.println("登陆成功");}else{out.println("账号或密码错误");}

测试如图:

66b39cefea89699334f2cf28c29bb452.gif

66b39cefea89699334f2cf28c29bb452.gif

上面的代码因为拼接的问题导致了万能密码的出现,所以在实际开发中我们一定要避免拼接字符串的代码

应该使用prepareStatement提供的(1,999)

PreparedStatement ps=conn.prepareStatement("select * from admin where username=? && password=?");ps.setString(1, id);ps.setString(2, pw);ResultSet rs=ps.executeQuery();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值