• SQL注入攻击及其解决方法


    SQL注入攻击:

      当程序中出现了SQL拼接时,当输入的值为jack'#或者'jack' or '1=1时,会让SQL语义发生改变,因为SQL语句中出现了SQL的关键字(# or 1=1),造成数据泄露,系统安全隐患。

    SQL语义发生改变的语句例如:

    select * from user where username='jack'#' and password=''
    
    select * from user where username='jack' or '1=1' and password=''

    解决SQL攻击:

      利用PreparedStatement对象;

    //3,获取带有预编译的传输器
    //SQL中包含着?的,叫做SQL骨架。
    //? 叫做占位符
    String sql = "select * from user where username=? and password=?";
    ps = conn.prepareStatement(sql);
    //设置参数setString
    //第一个参数必须和问号的顺序一致,
    //第二个参数指定问号的值
    ps.setString(1, name);
    ps.setString(2, pwd);
              
    //4,执行SQL
    rs = ps.executeQuery();

    PreparedStatement优势:

    1,防止SQL注入
    先把SQL骨架(带有?的一条SQL,?叫做 占位符)发送给数据库服务器,然后再把参数发给服务器。
    本质上是由于新对象把sql关键字给屏蔽了,把SQL关键字当做一个普通的文本处理。
    
    2,省略了参数拼接的麻烦,通过?作为占位符,通过setString方法来绑定问号的位置,并且赋值来完成的。
    
    3,提高执行效率
    先把SQL骨架缓存起来,当下次要访问相同SQL骨架的业务时,先去缓存中找SQL,缓存中没有的话,再发出SQL语句查询数据库。
  • 相关阅读:
    wpf中TreeView双击事件中获取当前节点、父节点以及子节点
    VS2019 打包WPF安装程序最新教程(图文详解)
    c#常用委托
    ffmpeg 安装和录屏(python)
    python os.walk
    使用Scapy解析pcap格式数据
    python os.path模块
    subprocess.Popen参数介绍
    Python 发送4种形式的邮件
    Linux终端命令之screen X
  • 原文地址:https://www.cnblogs.com/yikuan-919/p/9519805.html
Copyright © 2020-2023  润新知