• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 作文大全 > 正文

    sql注入测试用例 sql注入测试经验教程

    时间:2020-05-27来源:山茶花美文网 本文已影响 山茶花美文网手机站

    登录注入

    先看一个我们一般用的登录页面sql语句(原生态php执行的sql)

    $sql = "select * from users where username = "$username" and password = "$password"";

    对于这种sql,对应一个万能密码和用户名:

    万能密码: xx" or 1="1

    万能用户名: xx" union select * from users/*

    执行时mysql解释为:

    $sql = select * from users where username = "$username" and password = " xx" or 1="1"

    不解释,瞬间破解

    同样,上面是在sql语句中查询字段后的输入值加了单引号,有些时候尤其是初级程序员经常对变量不加单引号:

    $sql = "select * from users where username = $username and password = $password";

    这时mysql解释会被当做数字型字段来匹配

    万能密码: 11 union select * from users/*

    执行语句:

    select * from users where username =11union select * from users/* and password = 54

    查询注入

    这个比较好理解,一般在页面的搜索框点击按钮搜索时在后台sql中可能会用like来查询,但如果没有加任何处理,可能输入一个% 或 __ 就会注入到sql中查询全部或部分记录,不过在php中可以使用一个函数来处理一下:

    $keyword = addslashes($keyword);$keword = str_replace("%","$",$kwyword);

    插入注入

    我们先模拟一个网站注册页面的sql处理语句:

    insert into users(username,password,grade) values("frank","123456","1");

    假如users表中grade为等级字段,并且默认字段为1,注册时用户输入用户名和密码两个字段后,后台插入语句为上面语句,则当用户输入的密码为 123456","3")/*时,执行sql为:

    insert into users(username,password,grade) values("frank","123456","3")/*,"1";

    这样也可以达到注入的目的

    解决sql注入:

    ①. 在服务器设置将php.ini配置文件中magic_quotes_gpc设置为On

    服务器会自动将单引号转义为:"

    不过攻击时可以将单引号写为char(13)-单引号ASCII码,也一样可以攻击

    ②. 密码比对

    通过输入的用户名获取密码,再对密码进行匹配

    $sql = "select * from users where username ="frank""

    $result = mysql_query($sql,$conn);

    $row = mysql_fetch_array($result);

    if($row["password"] != $password) ...

    ③. 使用pdo的PDO::prepare()预处理操作

    PDO(PHP Data Object)扩展在PHP5中加入,PHP6默认识别PDO连接数据库,pdo相当于是一个数据库抽象层,不同数据库使用相同的方法名,解决数据库连接不同意问题。

    工作原理如下:

    sql注入测试经验教程1

    (使用时需先在php.ini中开启对pdo扩展的支持)

    $sql = "select * from users where username=? and password=?"; //创建一个pdo对象 $mypdo = new PDO("mysql:host=localhost;port=3306;dbname=xx","root","123456"); //设置编码 $mypdo->exec("set names utf8"); //预处理$sql $pdostatement = $mypdo->prepare(%sql); //将用户名和密码填入sql $pdostatement->execute(array($username,$password)); //得到查询结果 $result = $pdostatement->fetch(); if(empty($result)) ...

    ④. 其他企业级解决sql注入方式:IDS(入侵检测系统)

    sql注入测试经验教程2

    关于sql注入对于开发工程师来说主要是防守,提高编写安全代码的意识,让我们编写的代码质量更高,安全性方面更好。

    • sql注入测试用例 sql注入测试经验教程 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全