SQL注入指的是什么

37次阅读
没有评论

共计 1353 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 SQL 注入指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

SQL 注入 1. 什么是 SQL 注入

看一下下面的案例场景,这是正常情况下的登陆场景:

SQL 注入指的是什么

而当我们使用 用户名‘:– 的时候,密码随便输入也可以登陆成功↓

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 可以避免注入攻击;

以上是“SQL 注入指的是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1353字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)