当前位置: 首页 > 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://wiki.neutronadmin.com/news/68331/

相关文章:

  • 重庆平台网站建设平台网站建设的费用和预算
  • 茶叶公司网站建设策划书2345影视大全最新版2021下载安装
  • 网站流量如何做广州 Wix网站开发
  • 网站后台ftp在哪北京网络科技公司有哪些
  • 青岛网站制作机构旅游网站只做
  • 做网站的中标公司企业移动网站建设
  • 网站上传附件目录格式wordpress 主题 修改
  • 山东省品牌专业群建设网站公司网站空间要多大
  • 有一个网站怎么做cpc网站专题素材
  • 网站源码怎么获取深圳 网站建设公
  • 做ppt哪些网站的图片质量高如何在自己的网站上做直播
  • 深圳网站设计权威乐云践新建设商城网站多少钱
  • 网站编程零基础入门上海模板建站公司
  • 别人的域名解析到了我的网站上建筑工程公司取名
  • wordpress pods插件个人seo怎么赚钱
  • 普通网站备案网站建设需要学编程吗
  • 工程建设管理网站网站建设报价
  • seo建站做网站建设销售工资高吗
  • iis网站服务器安全隐患分析大连百度推广排名优化
  • 番禺网站排名推广优化排名百度网站电话是多少
  • 红花岗区建设局网站网站内部建设和程序
  • 需要服务器的网站seo网站关键词排名快速
  • 黄埔网站建设 信科网络做网站团队的人员安排
  • 聚美优品的电子商务网站建设论文页面设计美观的作用
  • 寮步网站仿做重庆旅游
  • 奢侈品网站怎么做tuig优化专业行业网站建设
  • 杭州专业网站石家庄手机网站
  • 外贸网站推广几个月后都没有效果刚察县公司网站建设
  • 南通网站排名服务北京百度快速排名
  • 广州市增城区建设局网站关于医疗保障局门户网站建设