导致SQL注入的原因是?怎么避免SQL注入?

本文揭示SQL注入现象,解释其由程序用户输入恶意SQL语句引起。讲解java.sql.Statement与PreparedStatement的区别,以及如何通过PreparedStatement预防注入。

在一个登录页面随意输入一个账号,密码输入如下格式:

 * 用户名: abc
 * 密码:abc' or '1'='1
  • 登录成功(若登陆成功则为SQL注入)
    以上随意输入一个用户名和密码,登陆成功了,这种现象被称为SQL注入现象
    导致SQL注入的原因是?如何解决?
  •  导致SQL注入的根本原因是:
    
  • 用户不是一般的用户,用户是懂的程序的,输入的用户信息以及密码信息 中含有SQL语句的关键字,这个SQL语句的关键字和底层的SQL语句进行“字符创的拼接” 导致原SQL语句的含义被扭曲了,最最最主要的原因是用户提供的信息参与了SQL语句的编译

java.sql.Statement接口的特点:

先进行字符串的拼接,然后再进行SQL语句的编译

  • 优点:使用Statement可以进行SQL语句的拼接
  • 缺点:因为拼接 的存在,导致可能给不法分子机会,导致SQL注入

java.sql.PrepardStatement接口的特点:

先进行SQL语句的编译,然后再进行SQL语句的传值

  • 优点:避免SQL注入

  • 缺点:没有办法进行SQL语句的拼接,只能给SQL语句传值

  • PrepardStatement预编译的数据操作对象   
    
  • 即使用户信息中有SQL关键字,但是只要不参加编译就没事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值