SQL注入问题及解决方案

SQL注入

用户输入的内容, 在SQL语句拼接过程中, 完成了一条逻辑发生变化的新的SQL语句 !


例如:  

原SQL语句拼接为: 

    String sql = "select id from user15 where username='"+user.getUserName()+"' and password='"+user.getPassWord()+"'";
    
用户输入的帐号密码分别为:

请输入您的帐号:
suibian
请输入您的密码:
suibian' or '1'='1
组成的SQL语句: 
select id from user15 where username='suibian' and password='suibian' or '1'='1'

解决SQL注入问题

使用预编译SQL语句 进行参数的传递

更改执行环境 Statement  

使用新的环境: PreparedStatement


在通过连接对象 获取一个预编译的SQL环境(PreparedStatement)时, 需要传递 一个SQL语句 ! 
在这个语句中 可以出现? , ? 表示准备填充的参数值!


使用步骤: 

    1.  通过连接对象, 获得一个预编译的SQL执行环境

        PreparedStatement state conn.prepareStatement(sql);

        例如: 
            String sql = "select id from user15 where username=? and password=?";
    
            PreparedStatement state  = conn.prepareStatement(sql);  
            
    2.    向预编译参数列表中 传递值: 

        预编译的SQL语句中可以包含0-n个问号, 每一个问号表示一个需要传递的值 
        我们通过PreparedStatement它的setXXX方法,来完成参数的传递
        在传递参数时, 需要指定问号的索引, 问号的索引从1开始            

        例如:
            state.setString(1,user.getUserName());
            state.setString(2,user.getPassWord());

    3.  执行语句:
            ResultSet result = state.executeQuery();

PreparedStatement

常用方法: 
    
    填充预编译的参数: 

    -   setXXX(问号索引,值)
        向预编译的SQL的?中传递值 
        参数1. 问号的索引 ,从1开始
        参数2. 填充到? 中的值

    -   execute()
    -   executeUpdate();
    -   executeQuery();
        上面的三个方法 与 Statement中方法的含义一致, 只不过不存在参数!

转载于:https://www.cnblogs.com/itcainiao2521/p/10167818.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值