mybatis如何防止SQL注入

神经网络巫师
• 阅读 2307


sql注入发生的时间,sql注入发生的阶段在sql预编译阶段,当编译完成的sql不会产生sql注入

一、采用jdbc操作数据时候

String sql = "update ft_proposal set id = "+id;

    PreparedStatement prepareStatement = conn.prepareStatement(sql);
    prepareStatement.executeUpdate();

复制代码

preparedStatement 预编译对象会对传入sql进行预编译,那么当传入id 字符串为 "update ft_proposal set id = 3;drop table ft_proposal;" 这种情况下就会导致sql注入删除ft_proposal这张表。

如何防止sql注入,首先将要执行sql进行预编译,然后在将占位符进行替换

String sql = "update ft_proposal set id = ?"
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1,"2");
ps.executeUpdate();
复制代码
处理使用预编译语句之外,java培训另一种实现方式可以采用存储过程,存储过程其实也是预编译的,存储过程是sql语句的集合,将所有预编译的sql 语句编译完成后,存储在数据库上,由于存储过程比较死板一般不采用这种方式进行处理。

二、mybatis是如何处理sql注入的?

假设mapper.xml文件中sql查询语句为:

<select id="findById" resultType="String">

select name from user where id = #{userid};

</select>
复制代码
对应的接口为:

public String findById(@param("userId")String userId);
复制代码
当传入的参数为3;drop table user; 当我们执行时可以看见打印的sql语句为:

select name from usre where id = ?;

不管输入何种参数时,都可以防止sql注入,因为mybatis底层实现了预编译,底层通过prepareStatement预编译实现类对当前传入的sql进行了预编译,这样就可以防止sql注入了。

如果将查询语句改写为:

<select id="findById" resultType = "String">
select name from user where id=${userid}
</select>
复制代码
当输入参数为3;drop table user; 执行sql语句为

select name from user where id = 3;drop table user ;
复制代码
mybatis没有进行预编译语句,它先进行了字符串拼接,然后进行了预编译。这个过程就是sql注入生效的过程。

因此在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。

关键词:java培训

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Wesley13 Wesley13
3年前
java持久层框架mybatis如何防止sql注入
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or‘1’’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全
Aimerl0 Aimerl0
4年前
网络渗透测试实验三
写在前面实验终于开始有意思起来了,Attack!网络渗透测试实验三:XSS和SQL注入实验目的了解什么是XSS了解XSS攻击实施,理解防御XSS攻击的方法了解SQL注入的基本原理掌握PHP脚本访问MySQL数据库的基本方法掌握程序设计中避免出现SQL注入漏洞的基本方法掌握网站配置。系统环境KaliLinux2、Wi
Easter79 Easter79
3年前
SQL注入基础 sql注入详细解释 小白学习笔记
sql注入作为安全攻防中最重要的一个部分,可以说是所有渗透测试注入中最为重要的一个注入,不管是预防还是测试,都需要扎实的基础才能明白sql注入。温馨提示:此文章仅限于学习记录与讨论,不得随意测试或者注入,互联网不是法外之地,任何除学习之外的事情与作者无关。sql注入顾名思义就是执行sql命令原理:执行的用户能使用sql注入绕过认证机制
Easter79 Easter79
3年前
StringBuilder
1、首先需要填写一个StringBuilder的扩展类namespaceCode.Common{///<summary///扩展StringBuilder方法///防止Sql注入///</summarypublicstaticcl
Stella981 Stella981
3年前
PHP开发web应用安全总结
一、SQL注入攻击(SQLInjection)攻击者把SQL命令插入到Web表单的输入域或页面请求的字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:1.某个Web应用有一个登录页面,这
Stella981 Stella981
3年前
SQL注入基础 sql注入详细解释 小白学习笔记
sql注入作为安全攻防中最重要的一个部分,可以说是所有渗透测试注入中最为重要的一个注入,不管是预防还是测试,都需要扎实的基础才能明白sql注入。温馨提示:此文章仅限于学习记录与讨论,不得随意测试或者注入,互联网不是法外之地,任何除学习之外的事情与作者无关。sql注入顾名思义就是执行sql命令原理:执行的用户能使用sql注入绕过认证机制
Wesley13 Wesley13
3年前
CTF 常见操作总结
一般流程1.首先看header,veiwsource,目录扫描2.有登陆,尝试sql注入&爆破3.有数据库,必然sql注入?普通sql注入1.判断是否存在回显异常尝试单双引号2.查是字符型?数值型?若1'成功查询,则是字符型若失败则是数值型3.确定字段数1'
Wesley13 Wesley13
3年前
Java防止SQL注入
SQL注入简介:       SQL注入是最常见的攻击方式之一,它不是利用操作系统(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Flib.csdn.net%2Fbase%2Foperatingsystem)或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了
Wesley13 Wesley13
3年前
mysql学习总结(三)
1.SQL注入     1)什么是sql注入:         例如:用户在网页进行登录操作时,输入数据库语句,导致网页的登录限制失效,不需要输入用户名和密码,用户可以输入语句就登录网页     2)出现sql注入的原因:        因为太相信用户的输入,导致我们在接收用户
欣喜若狂 欣喜若狂
2年前
XSS攻击问题皕杰报表解决方案
XSS表示CrossSiteScripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在XSS攻击中,通过插入恶意脚本,实现对用户游览器的控制。XSS攻击可以分成两种类型:1
神经网络巫师
神经网络巫师
Lv1
故国山川,故园心眼,还似王粲登楼。
文章
2
粉丝
0
获赞
0