• ADADADADAD

    SQL注入指的是什么[ mysql数据库 ]

    mysql数据库 时间:2024-11-28 13:27:14

    作者:文/会员上传

    简介:

    SQL注入1.什么是SQL注入看一下下面的案例场景,这是正常情况下的登陆场景:而当我们使用 用户名‘:– 的时候,密码随便输入也可以登陆成功↓这时候对比两条sql就能发现,其实用户通

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    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语句PreparedStatementptmt=conn.prepareStatement("select*fromuserwhereuserName=?andpassword=?");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("selectuserNamefromuser");

                  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注入指的是什么.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: sql注入