JDBC PreparedStatement 防止sql注入原理

JDBC PreparedStatement 防止sql注入原理

使用Statement执行查询语句的时候  :

           比如要执行用户名 密码登录验证的sql语句 经常要输入 String sql =  " select * from login where name=' " +name+ " ' and pwd = ' " +pwd+ " ' ";

           这时候如果用户输入的密码是  ' or '1' = '1 

           这时候 整条输出语句可以拼装为    select * from login where name='xx' and pwd =' ' or '1' = '1'

           因为  '1' = '1'  永远为true   相当于  select * from login;     会把表中所有数据都查出来  甚至可能进行修改、删除

 

而使用PreparedStatement 就可以防止sql注入方式 是因为 它进行了循环遍历:

          首先这个类进行语句执行不是直接进行语句的拼接,而是先进行预编译,用? 进行占位 再set()的时候 将属性左右加上 ' (int类型不会)  

          然后会把用户输入的所有字符集全部遍历 如果识别出 一些特殊字符 比如  换行符、\ 、双引号、单引号 还有一些特殊字符 会进行编译

          比如还是输入刚才的密码  会变成 select * from login where name='xx' and pwd =' \' or \'1\' = \'1\'  '   

          所以使用了PreparedStatement 就 无法截断SQL语句,也就是说  无法拼接SQL语句,防止了sql注入。

         

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值