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

网站建设询价函基于php mysql的网站开发

网站建设询价函,基于php mysql的网站开发,做免费网站推广开头语,网站后台管理布局前言#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.dnsts.com.cn/news/203039.html

相关文章:

  • 个人网站没人访问微官网和微网站
  • 杭州手机网站建设公司wordpress apache内存
  • 个人商城网站备案西安学校网站建设费用
  • js特效网站模板产品设计公司
  • 网站建设方案书一定要交聊城手机网站服务
  • 清河网站建设电话免费怎样搭建网站
  • 网站建设的网络公建立网站需要多少人
  • 广西南宁网站公司开发一套网站系统 多少钱
  • 公司做网站好吗wordpress中文主题免费下载
  • 公司网站的定义wordpress 无限嵌套
  • 手工制作国庆节作品图片单页seo如何优化
  • 整网站代码 带数据 免费 下载网站建设相关专业
  • 广州专业建网站公司惠州企业网站建设选哪家
  • 网站左下角广告代码企业网站搭建多少钱
  • 代理公司注册网站用插件做网站
  • 在网站留外链怎么做镇江网站建设镇江
  • 关于网站建设的通知哪个网站可以做专业兼职
  • 为什么网站要友情链接百度问答平台
  • 嘉兴专业网站建设wordpress 继续阅读
  • 旅游网站开发方案百度文库vs做网站应该新建什么
  • 宁波城乡住房建设局网站湖北专业网站建设公司
  • 深圳定制网站制作报价抖音运营推广策划方案
  • 重庆市在建项目查询seo优化包括
  • 做企业网站一般多少钱医院网站建设需求分析
  • 济宁网站建设培训学校会计培训班推荐
  • 帮人做微信是哪个网站包头市住房和城乡建设局官方网站
  • 合肥seo优化北京优化seo排名
  • 建设银行宁波分行 招聘网站如何在百度上做广告
  • 奇人网站深圳网站建设与推广
  • 怎么在网站文本框内做超连接台州优化官方网站