千家信息网

SQL注入与防止及myBaits基本作用是怎样的

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这期内容当中小编将会给大家带来有关SQL注入与防止及myBaits基本作用是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SQL注入在嵌入式SQL编程中,sq
千家信息网最后更新 2025年01月19日SQL注入与防止及myBaits基本作用是怎样的

这期内容当中小编将会给大家带来有关SQL注入与防止及myBaits基本作用是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

SQL注入

在嵌入式SQL编程中,sql语句通常是以字符串的形式提交给数据库管理系统的。SQL注入是利用SQL语法将一些恶意代码加入到该字符串中,从而获取到非授权的数据。
如:用户登录(假设用户名为admin,密码为 123456),通常使用以下语句进行判断

select * from user where username='admin' and password='123456'

如果获取到记录,则允许登录,否则提示"用户名不存在或密码错误"。加入我并不知道用户密码,知道用户名为"admin",在输入用户名时,将用户名变为 admin'-- ,此时sql语句变为

select * from user where username='admin'-- and password='123456'

则登录成功。如下图密码随意输入,如果没有做任何防止SQL注入的处理,完全可以登录成功

假如:用户名我输入的是"admin;drop table user;-";会发生啥结果?

防止SQL注入的方法

JDBC提供的PreparedStatement可以防止SQL注入;PreparedStatement对sql预编译后,sql语句中的参数需要用?代替。然后调用setXX()方法设置sql语句中的参数。这样再传入特殊值,也不会出现sql注入的问题了,示例代码如下:

String sql="select * from user where username='?'"+" and password='?'";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1,"admin");pstmt.setString(2,"123456");//5、执行语句ResultSet rs=pstmt.executeQuery(sql);

还有另外一种方法,就是把SQL语句写入存储过程,通过存储过程完成查询,同样可以防止SQL注入。

mybaits中${}和#{}的使用

"$ "是拼接符;使用"${} "相当于在高级语言中已经将sql语句进行拼接,而且对于变量是不加引号的,如:用户名为admin,参数变量为 sname

select * from user where username='${sname}'--此种情况下,高级语言交给数据库的SQL语句是select * from user where username='admin'

此种情况下是无法防止SQL注入的。

#{}是占位符;使用"#{} "只能在数据库管理系统中,将#{}中的参数带入

select * from user where username=#{sname}--此种情况下,首先经过预编译形成如下SQL,再将参数带入,此时给参数值带加单引号select * from user where username=?

此种情况下是可以防止SQL注入的

既然#{}能够防止SQL注入,"$ {}"不能,为什么mybaits还要提供这么一个符号?,当然有myBatis的理由,如果SQL语句中数据库对象需要传参进去,那只能使用** ${}**。如查询用户表(user) ,参数变量为tableName='user',代码只能是

select * from ${tableName}//转换为SQL语句为select * from user

在myBatis中变量做为where子句中的参数,一律使用#{},禁止使用" " , 以 防 S Q L 注 入 ; S Q L 语 句 中 包 含 了 数 据 库 对 象 ( 如 表 、 视 图 等 ) 才 能 使 用 " {} ",以防SQL注入;SQL语句中包含了数据库对象(如表、视图等)才能使用" ",以防SQL注入;SQL语句中包含了数据库对象(如表、视图等)才能使用"{} ",因为#{},自动给变量加上引号,如上例:

select * from #{tableName}//转换为SQL语句为select * from 'user'

上述就是小编为大家分享的SQL注入与防止及myBaits基本作用是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

语句 用户 参数 数据 数据库 变量 密码 情况 用户名 登录 代码 对象 引号 方法 输入 作用 高级 成功 内容 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全系统漏洞案例 市局召开网络安全培训会 无线网络技术与规划设计 网络安全保障工作进展 软件开发进度如何写 lol游戏服务器连接不上 手机怎么登录网站服务器 带薪培训软件开发 天津电力卫星授时服务器云服务器 校园网络安全技术大全 软件开发的第一阶段的主要任务 在数据库中创建数据表结构 云服务器设置多大合适 阴阳师大区服务器在什么位置 hp服务器升级bios 滨州瓷砖软件开发定制 软件开发框架有几种 福建惠普服务器维修调试哪家好 没有网络技术人员怎么办 ug软件开发公司 南京仁宝电脑 软件开发 dota英文版数据库 我国有关网络安全的政策法律 杭州亿友财务软件开发有限公司 物联网软件开发技术需求 数据库技术发展经历的三个阶段 广州智能建模软件开发 售前与软件开发哪个有前景 互联网科技大佬的老婆学生物 软件开发注册类图
0