码迷,mamicode.com
首页 > 数据库 > 详细

SQL注入攻击及其解决方法

时间:2018-08-22 19:34:26      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:数据库   tst   数据泄露   use   编译   数据库服务器   user   HERE   dstat   

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语句查询数据库。

 

SQL注入攻击及其解决方法

标签:数据库   tst   数据泄露   use   编译   数据库服务器   user   HERE   dstat   

原文地址:https://www.cnblogs.com/yikuan-919/p/9519805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!