您好,欢迎访问一九零五行业门户网

什么是SQL注入?带你从零开始认识SQL注入

从零开始认识sql注入 ,什么是sql注入?sql注入就是本来我只有我能操作数据库,本来只是让你输入内容就走,而你却输入命令,从而在我不知情下操作数据库
sql注入1.什么是sql注入看一下下面的案例场景,这是正常情况下的登陆场景:
而当我们使用 用户名‘:– 的时候,密码随便输入也可以登陆成功↓
这时候对比两条sql就能发现,其实用户通过在用户名写入的sql符号将内部sql提前结束,并且将后半句检索条件注释起来达到免密码登陆效果。
sql注入就是本来我只有我能操作数据库,本来只是让你输入内容就走,而你却输入命令,从而在我不知情下操作数据库
2.漏洞的修复会产生上门面的情况是因为上面的sql是使用动态拼接的方式,所以sql传入的方式可能改变sql的语义。
动态拼接就是在java中java变量和sql语句混合使用:select * from user where username=’”+username+”’ and password = ‘”+password”’
所以要使用preparedstatement的参数化sql,通过先确定语义,再传入参数,就不会因为传入的参数改变sql的语义。(通过setint,setstring,setboolean传入参数)
3.参数化sql使用案例 //建立数据连接 conn=ds.getconnection(); //1.设置preparestatement带占位符的sql语句 preparedstatement ptmt = conn.preparestatement("select * from user where username = ? and password = ?"); ptmt.setstring(1, "张三"); //2.设置参数 ptmt.setstring(2, "123456"); rs=ptmt.executequery(); while(rs.next()){ system.out.println("登陆成功"); return; } system.out.println("登陆失败");
参数化特点:
1.设置preparedstatement带占位符的sql语句
statement执行sql语句的方式:
stmt=conn.createstatement();rs=stmt.executequery("select username from user");
2.设置参数
perparedstatement继承于statement,这里主要使用的使他参数化sql的特性。
转:https://blog.csdn.net/qq_30258957/article/details/78145885
加:1.都是用来执行sql的 preparedstatement extends statement;
2.statement适合执行静态(无条件)sql  preparedstatement适合执行动态(有条件)sql;
3.preparedstatement可以避免注入攻击;
 相关文章:
一个自认为很安全的php防sql注入 求破解
深入了解sql注入和预防措施
相关视频:
防御sql注入-php实战商城开发视频教
以上就是什么是sql注入?带你从零开始认识sql注入的详细内容。
其它类似信息

推荐信息