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

做ps找图的网站有哪些自己做的优惠卷网站怎么进商品

做ps找图的网站有哪些,自己做的优惠卷网站怎么进商品,网站平面设计,wordpress 免费中文模板下载地址链接#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.yutouwan.com/news/499113/

相关文章:

  • 交友高端网站建设专门做水生植物销售网站
  • 苏州网联盛网站建设开公众号的流程
  • 河南公司网站制作咨询没有备案做盈利性的网站违法吗
  • 南通网站建设公司排名网站对接qq群 虚拟主机
  • 罗湖网站定制wordpress游戏网站
  • 佛山做企业网站公司滨州j建设局网站投诉电话
  • 网站支付接口如何做北京电商网站建设
  • 网站建设数据库是什么生活家家居装饰公司官网
  • 建行官网网站wordpress 引用网页
  • 版面设计素材网站1688网站特色
  • 南浔哪有做网站的教育培训学校网站建设方案
  • 免费电视剧网站大全在线观看wordpress评论等于注册
  • 网站如何做播放线路网站视频怎么做的好
  • 山西省住房建设厅网站网站建设与网站管理
  • 用vue.js做网站爱站网seo查询
  • 上海专业做网站建设如何做wordpress 搜索结果页
  • 网站建设哪家好网站建设哪家好网站建设哪家手机app制作报价
  • 网站开发方向 英语翻译wordpress插件机制
  • 自设计网站网站建设法语
  • 企业网站优化应该怎么做茂名网站建设制作
  • 谷歌seo站内优化网站风格细节
  • php 网站换空间沈阳网站排名公司
  • 网站seo 规范百度搜索一下就知道
  • 国家电网建设部网站官网小程序定制外包
  • 黄山网站建设哪家好母婴网站的功能设计
  • 建网站哪家质量好如何提高网站速度
  • 广州建设网站首页公司网站建设精英
  • 安全的网站建阿里巴巴官网入口
  • 推广 网站建设小程序问答库
  • 冯提莫斗鱼前在哪个网站做直播微信开放平台是干什么的