关于防sql注入
来源:互联网 发布:java 未来前景 编辑:程序博客网 时间:2024/05/22 07:57
在学习mybatis之前了解过防SQL注入,当时一般是用java提供是statement来执行查询语句。
但这样就会遇到一个问题,黑客攻击者可以通过在SQL语句后加入一些SQL片段例如(or '1'='1'),这样就能获得到数据库中是其他数据
针对这个问题java有提供了另一个api就是preparedstatement,通过调用connection.preparedStatement(sql)得到对象。
使用preparedstatement进行查询时,数据库会先将SQL语句进行预编译处理,被编译好后可以重复使用,效率比statement高。
SQL注入都是在SQL编译时气作用,这样就避免了SQL注入。
编译时可以将不确定的参数用占位符'?'表示,执行的时候在用参数将占位符替换。
以上是java提供是api进行SQL查询,当我们用到mybatis框架时。SQL语句还是要自己写,因此也存在SQL注入。这时我们可以这样写
<select id="getBlogById" resultType="Blog" parameterType=”int”>
SELECT id,title,author,content
FROM blog
WHERE id=#{id}
</select>
MyBatis启用了预编译功能,在SQL执行前,会先将上面的SQL发送给数据库进行编译;执行时,直接使用编译好的SQL,替换占位符“?”就可以了。
因为SQL注入只能对编译过程起作用,所以这样的方式就很好地避免了SQL注入的问题。
#{}:相当于JDBC中的PreparedStatement
${}:是输出变量的值
简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
- 关于防sql注入
- 关于PDO防sql注入问题
- 防sql注入&文本框防sql注入
- 防SQL注入
- SQL防注入简介
- SQL防注入简介
- SQL防注入
- SQL防注入简介
- asp sql 防注入
- 防SQL注入
- 防SQL注入攻击
- SQL防注入简介
- 'SQL防注入
- 防sql注入代码
- 防sql注入
- 被动防SQL注入
- 防SQL注入
- sql防注入 sql防注入 sql防注入 sql防注入
- 【java基础】抽象类与接口的异同!
- ArrayList中remove()方法删除长度大于5的元素之后下标重定位的问题
- Kinect V2 在windows上开发遇到的问题
- 分页查询工具类
- HTML5 介绍
- 关于防sql注入
- linux命令之用户管理
- 19.6 union一种节省空间的类--使用类管理union成员
- tp取无限级分类
- 数据结构:用JS模拟Set类的实现
- shell(2):基础,9*9乘法表
- 小程序数据缓存
- scp命令 传输
- 快速编译安装ngrok服务端