当前位置: 首页 > news >正文

嘉兴市城市建设门户网站广东深圳是一个城市吗

嘉兴市城市建设门户网站,广东深圳是一个城市吗,俄文网站建设 俄文网站设计,专业生产车间设计图纸网站链接#xff1a;https://juejin.im/post/5e131203e51d4541082c7db3Mybatis这个框架在日常开发中用的很多#xff0c;比如面试中经常有一个问题#xff1a;$和#的区别#xff0c;它们的区别是使用#可以防止SQL注入#xff0c;今天就来看一下它是如何实现SQL注入的。什么是S… 链接https://juejin.im/post/5e131203e51d4541082c7db3Mybatis这个框架在日常开发中用的很多比如面试中经常有一个问题$和#的区别它们的区别是使用#可以防止SQL注入今天就来看一下它是如何实现SQL注入的。什么是SQL注入在讨论怎么实现之前首先了解一下什么是SQL注入我们有一个简单的查询操作根据id查询一个用户信息。它的sql语句应该是这样select * from user where id  。我们根据传入条件填入id进行查询。如果正常操作传入一个正常的id比如说2那么这条语句变成select * from user where id 2。这条语句是可以正常运行并且符合我们预期的。但是如果传入的参数变成 or 11这时这条语句变成select * from user where id or 11。让我们想一下这条语句的执行结果会是怎么它会将我们用户表中所有的数据查询出来显然这是一个大的错误。这就是SQL注入。Mybatis如何防止SQL注入在开头讲过可以使用#来防止SQL注入它的写法如下select idsafeSelect resultMaptestUser   SELECT * FROM user where id #{id}select在mybatis中查询还有一个写法是使用$它的写法如下select idunsafeSelect resultMaptestUser   select * from user where id ${id}select当我们在外部对这两个方法继续调用时发现如果传入安全的参数时两者结果并无不同如果传入不安全的参数时第一种使用#的方法查询不到结果(select * from user where id or 11)但这个参数在第二种也就是$下会得到全部的结果。并且如果我们将sql进行打印会发现添加#时向数据库执行的sql为:select * from user where id or 11 它会在我们的参数外再加一层引号在使用$时它的执行sql是select * from user where id or 11。弃用$可以吗我们使用#也能完成$的作用并且使用$还有危险那么我们以后不使用$不就行了吗。并不是它只是在我们这种场景下会有问题但是在有一些动态查询的场景中还是有不可代替的作用的比如动态修改表名select * from ${table} where id #{id}。我们就可以在返回信息一致的情况下进行动态的更改查询的表这也是mybatis动态强大的地方。如何实现SQL注入的不用Mybatis怎么实现其实Mybatis也是通过jdbc来进行数据库连接的如果我们看一下jdbc的使用就可以得到这个原因。#使用了PreparedStatement来进行预处理然后通过set的方式对占位符进行设置而$则是通过Statement直接进行查询当有参数时直接拼接进行查询。所以说我们可以使用jdbc来实现SQL注入。看一下这两个的代码:public static void statement(Connection connection) {  System.out.println(statement-----);  String selectSql select * from user;  // 相当于mybatis中使用$拿到参数后直接拼接  String unsafeSql select * from user where id or 11;;  Statement statement null;  try {    statement connection.createStatement();  } catch (SQLException e) {    e.printStackTrace();  }  try {    ResultSet resultSet statement.executeQuery(selectSql);    print(resultSet);  } catch (SQLException e) {    e.printStackTrace();  }  System.out.println(---****---);  try {    ResultSet resultSet statement.executeQuery(unsafeSql);    print(resultSet);  } catch (SQLException e) {    e.printStackTrace();  }}public static void preparedStatement(Connection connection) {  System.out.println(preparedStatement-----);  String selectSql select * from user;;  //相当于mybatis中的#先对要执行的sql进行预处理设置占位符然后设置参数  String safeSql select * from user where id ?;;  PreparedStatement preparedStatement null;  try {    preparedStatement connection.prepareStatement(selectSql);    ResultSet resultSet preparedStatement.executeQuery();    print(resultSet);  } catch (SQLException e) {    e.printStackTrace();  }  System.out.println(---****---);  try {    preparedStatement connection.prepareStatement(safeSql);    preparedStatement.setString(1, or 1 1 );    ResultSet resultSet preparedStatement.executeQuery();    print(resultSet);  } catch (SQLException e) {    e.printStackTrace();  }}public static void print(ResultSet resultSet) throws SQLException {  while (resultSet.next()) {    System.out.print(resultSet.getString(1) , );    System.out.print(resultSet.getString(name) , );    System.out.println(resultSet.getString(3));  }}总结Mybatis中使用#可以防止SQL注入$并不能防止SQL注入Mybatis实现SQL注入的原理是调用了jdbc中的PreparedStatement来进行预处理。确认过眼神
http://www.zqtcl.cn/news/929689/

相关文章:

  • 企业营销网站建设公司哪家好网站建设团队名称
  • 法制网站建设问卷调查手机网站打开自动wap
  • 建设网站 如何给文件命名佛山网站推广市场
  • 网站客户问题解答网站建设网站规划书
  • 罗湖网站公司网络营销的种类有哪些
  • 怎么做微网站推广做一个自己的网站需要什么
  • 一个静态网站开发考虑什么最近一周新闻热点回顾
  • 北京网站设计知名乐云seo汝州建设局网站
  • 珠海左右创意园网站开发注册安全工程师报名条件和要求
  • 建设文明网站包括怎么用手机建设网站
  • 网站建设商城宁波seo深度优化平台有哪些
  • 免费企业查询网站网站建设有关的职位
  • 有哪些网站是可以做会计题目的广告网站建设设计
  • 房地产项目网站建设wordpress codecolorer
  • 网站服务器机房html5写的网站有什么好处
  • 三网合一网站源码下载宣传片拍摄手法及技巧
  • 重庆有网站公司公司做网站能抵扣进项税吗
  • 深圳南山网站开发卖东西的网站怎么建设
  • 网站开发教程全集网站内外链建设
  • 购物网站排名数商云科技
  • 哪种网站百度网盘登录入口官网
  • 做淘宝网站多少钱wordpress 七牛云存储
  • 做淘宝网站多少钱江苏省建设厅网站建筑电工证
  • 深圳网站建设 贴吧广州档案馆建设网站
  • 专注网站建设电商商城网站建设
  • 黄石专业网站建设推广一起做网店 网站打不开
  • 网站session 验证江西星子网
  • 成都高校网站建设服务公司小树建站平台
  • 宁波网站建设 慕枫科技顺德网站设计制作
  • 企业网站如何宣传wordpress 链接修改插件