数据库篇(九)——SQL注入的相关问题

一、SQL语句应该考虑哪些安全性?

  • 防止SQL注入,对特殊字符进行过滤、转义或者使用预编译的SQL语句绑定变量
  • 当SQL语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息。

二、什么是SQL注入?

举例来说,在后台写的java代码拼的SQL如下:

public List getInfo(String ename){
    StringBuffer buf=new StringBuffer();
    buf.append("select empno,ename,deptno from emp where ename='").append(ename).append('");
    .....
    .....
}

假设前端输入ename的是:

'or'1'='1

那么就会涉及到sql注入的问题了。上面的ename与后端的select拼接为:

select empno,ename,deptno from emp where ename=''or'1'='1'

以上的where条件永远成立,如此查询到的结果是所有成员的信息,涉及安全问题。
如果是insert或者是update等语句,会造成不可估计的错误。
上面这种不安全的情况是在SQL语句拼接的情况下发生。

三、解决方法:

1、参数绑定:不用拼接SQL字符串,可以用prepareStatement,参数用set方法进行填装。
2、检查变量的数据类型和格式:
如果是类似where id={$id}这种形式,数据库里所有的id都是数字,在SQL执行前检查确保变量id的类型。
因此,只要有固定格式的变量,在SQL语句执行前,应该严格检查格式,确保变量是预想的格式,可以有效避免SQL注入。
3、所有的SQL语句都封装在存储过程中:可以避免SQL注入,还可以提高性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值