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

南昌网站建设索王道下拉北京市企业信用信息网

南昌网站建设索王道下拉,北京市企业信用信息网,网络推广网站建设有限公司,住房和城乡建设部网站资质查询前言#xff1a; 堕落了三个月#xff0c;现在因为被找实习而困扰#xff0c;着实自己能力不足#xff0c;从今天开始 每天沉淀一点点 #xff0c;准备秋招 加油 注意#xff1a; 本文章参考qax的网络安全java代码审计#xff0c;记录自己的学习过程#xff0c;还希望…前言 堕落了三个月现在因为被找实习而困扰着实自己能力不足从今天开始 每天沉淀一点点 准备秋招 加油 注意 本文章参考qax的网络安全java代码审计记录自己的学习过程还希望各位博主 师傅 大佬 勿喷还希望大家指出错误 1.SQL语句参数直接动态拼接 常见的的执行语句为Statement执行SQL语句 例如下面这段代码 % //驱动程序名 String driverName com.mysql.jdbc.Driver; //数据库用户名 String userName root; //密码 String userPasswd root; //数据库名 String dbName javasqltest; //表名 String ID 1//联结字符串 String url jdbc:mysql://localhost:3306/ dbName ?user userName password userPasswd; Class.forName(com.mysql.jdbc.Driver).newInstance(); Connection connection DriverManager.getConnection(url); Statement statement connection.createStatement(); String sql SELECT * FROM people where id ID ; ResultSet rs statement.executeQuery(sql); % 打印出来的结果如图下所示 数据库数据 我们发现 像这种情况就是由SQL语句参数直接动态拼接成的这样的话参数ID可控并且可以执行sql语句的拼接存在明显的SQL注入漏洞 String sql SELECT * FROM people where id ID ; 我们测试验证 一下 传入参数为   1 and 1 1 果然存在漏洞这样就有个严重 的问题 当输入1 or 1 1就会打印所有的表的数据 造成数据泄露 1 or 11 2.预编译有误 首先预编译处理就是将一些灵活的参数值以占位符?的形式给代替掉我们把参数值给抽取出来把SQL语句进行模板化。让MySQL服务器执行相同的SQL语句时不需要在校验、解析SQL语句上面花费重复的时间 public void test1() throws Exception {// 获取连接Connection connection DriverManager.getConnection(jdbc:mysql://localhost:3306/mybatis?useServerPrepStmtstrue, root, admin);String sql select * from user where id ?;PreparedStatement ps connection.prepareStatement(sql);ps.setInt(1, 1);// 执行查询,获取结果集ResultSet rs ps.executeQuery();//遍历查询结果集while (rs.next()) {System.out.println(rs.getObject(id)---rs.getObject(username));}rs.close();ps.close();}那么预编译有误这个很好理解就是使用错了编程方式也就是采用了动态拼接 上述代码就是典型的预编译错误编程方式虽然id参数使用了PrepareStatement进行SQL查询但是后面的usermame使用了SQL语句拼接的方式“sql and usermame like%”username .%;将username参数进行了拼接这样导致了SQL注入漏洞的产 生。传入的username值为“user% or T1#   3.order by 注入  就是即使是标准的预编译处理也难以防止sql注入因为某些情况下是不能使用预编译处理的只能采用字符串拼接处理 像order by 注入 原理 SQL中ORDER BY执行排序后面需要指定列名该列名是不能被引号包含的否则就会被认为是一个字符串。 所以进行ID拼接的时候就出现了 sql注入 4. %和_模糊查询 首先明白这两个通配符的作用 _任意一个字符 %任意0或多个字符。 下面举例 例如查询名字为root的用户 得到 我们填入r试试 查询不到 但是因为在java中预编译查询不会对%和_ 进行转义而它们又是like查询的通配符所以出现了漏洞我们输入  usernamer% 能够得到root的全部信息 所以只能手动过滤_和%  5.MyBatis中的#{}和${} 1、#{}表示一个占位符号 相当于 jdbc中的 ? 符号 #{}实现的是向prepareStatement中的预处理语句中设置参数值sql语句中#{}表示一个占位符即? 2、${}将传入的数据都当成一个字符串会对自动传入的数据加一个双引号。如select * from user where id #{user_id}如果传入的值是11,那么解析成sql时的值为where id11 就是说使用#{}方法更为安全 ${}方法不安全 因为在MyBatis中像order by 查询like查询in参数等都只能采用拼接方式 要确切的查询只能用到${}所以就会出现sql注入 所以得采用手动过滤的方法进行修复
http://www.zqtcl.cn/news/126565/

相关文章:

  • 手机网站 微信网站 区别布吉做网站
  • 网站建设层级图微信小程序怎么制作网页
  • 服务器上的网站怎么做301中小企业网站制作报价
  • 做网站需要用什么技术制作静态网站制作
  • drupal网站开发盐城网站建设费用
  • 采票网站刷流水做任务网站建设方案及预算
  • 传奇网站模块下载天蝎做网站建网站
  • 收录网站的二级域名wordpress虚拟币接口
  • 论坛建站烟台工程建设信息网站
  • 南京有哪些做网站的公司网站开发兼职团队
  • 网站建设优化外包免费客户管理软件哪个好用
  • 网上购物最便宜的网站微信官方网站服务中心
  • 充电网站建设方案个体工商户查询
  • 所有网站302跳转百度wordpress最大上传2g
  • 南京网站制作网页seo推广百度百科
  • 陵水网站建设哪家好建设培训考试服务网站
  • h5视频网站模板中国十大企业培训机构排名
  • 强的网站建设明细报价表网站建设推广新业务
  • 哪里有免费做网站wordpress 在文章前面加序号
  • 263企业邮箱登录入口首页seo公司哪家
  • 哈尔滨建设银行网站岳阳建设网站
  • 中山网页网站设计模板自己做的网站怎么让别人看见
  • 建设装饰网站出口跨境电商平台
  • 陕西网站建设公司排名WordPress图片生成文章
  • t恤定制网站wordpress 分类 seo
  • 万网网站空间多少钱一年做哪些网站流量最大
  • seo网站优化服务网站开发电脑
  • 宿迁怎样建设网站wordpress 分类目录 标签
  • 惠州双语网站建设费用seo搜索工具栏
  • 做ppt会去什么网站找图网页制作与网站建设试题