SQL注入指的是什么

小编给大家分享一下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注入指的是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网站标题:SQL注入指的是什么
链接分享:http://scjbc.cn/article/ppocpi.html

其他资讯