zoukankan      html  css  js  c++  java
  • SQL注入

    将jdbc看作一个函数,输入sql,输出数据:
    - eg:select people from user where id=12
      12是从表单获取的,但是如果表单种填的不是12
      而是 12;show database;
      那么最终的传给jdbc的sql语句是
      select people from user where id=12;show database; //就会暴露数据库表名


      获得表名继续利用sql注入,表单中填 12;select * from [表名]
      select people from user where id=12;select * from [表名];//就会暴露所有信息


    这是利用了对输入数据检测不严格的问题:
    所以解决方式有两种:


    - 1、对输入的数据进行校验(不推荐)
      魔高一尺道高一丈,只能解决部分问题,万一程序员疏漏,又会出问题


    - 2、对jdbc进行优化(十分推荐)
      jdbc三步骤:
        1> 加载驱动
        2> 创建连接
        3> 创建陈述对象编译sql
        4> 执行获取数据
      要避免sql注入,很明显,sql第3步开始参与,所以只能从第3步做文章:
      就是将输入的数据和sql查询拆开
      eg:select people from user where id=12
      先利用陈述对象编译select people from user where id=?
      再将12传给编译好的语句,这样,不管你输入的是什么数据都不会影响jdbc的执行,就能从根本上杜绝sql注入了


    eg:
      String sql = "select people from user where id=?"; //执行sql前会预编译号该条语句
      PreparedStatement s = conn.prepareStatement(sql);
      s.setString(12, id); //表单输入的数据就不会参与编译过程了
      ResultSet rs=pstmt.executeUpdate();

  • 相关阅读:
    [BZOJ 3282] Tree 【LCT】
    [BZOJ 2049] [Sdoi2008] Cave 洞穴勘测 【LCT】
    [BZOJ 1036] [ZJOI2008] 树的统计Count 【Link Cut Tree】
    [HDOJ
    Excel+DDT数据驱动实例
    jenkins+SVN配置
    [转]loadrunner:系统的平均并发用户数和并发数峰值如何估算
    loadrunner:Auto Correlate自动定位瓶颈
    loadrunner:判断是否服务器连接池瓶颈
    利用page_source抓取网页中的URL,进行链接测试
  • 原文地址:https://www.cnblogs.com/yizhixiang/p/13403779.html
Copyright © 2011-2022 走看看