1、配置一个mysql数据库连接页面叫connectsql.php;

  1. <?php
  2. $dsn = 'mysql:host=localhost;port=3308;dbname=cary;charset=utf8';
  3. $username = 'root';
  4. $password = '';
  5. $pdo = new PDO($dsn,$username,$password);
  6. //var_dump($pdo);
  7. ?>

2、使用query方法查询数据库,当前端输入的是合法的用户名和密码和使用了sql注入,得到下面两种结果;

第一种当前端输入的是合法的用户名和密码;

  1. <?php
  2. header('content-type:text/html;charset:utf8');
  3. //假设前端页面传过来的用户名和密码是qinshihuang和123456,分别赋值给了两个变量。
  4. $loginname = "qinshihuang";
  5. $loginpwd="123456";
  6. //引用数据库连接文件
  7. require_once 'connectsql.php';
  8. //用前端传过来的用户名和密码查询数据库里面是否存在;
  9. $stmt = $pdo -> query("select `username`,`password`,`chinesename` from `login`
  10. where `username` = '{$loginname}' and `password` = '{$loginpwd}'" );
  11. foreach ($stmt as $row) {
  12. print $row['username'] . "<br>";
  13. print $row['password'] . "<br>" ;
  14. print $row['chinesename'] . "<br>";
  15. }
  16. //显示执行的sql语句
  17. var_dump($stmt);
  18. ?>

输入用户名qinshihuang,密码123456,返回的值。

qinshihuang
123456
秦始皇
执行了下面的语句
C:\wamp\www\202201\login.php:20:
object(PDOStatement)[2]
public ‘queryString’ => string ‘select username,password,chinesename from login

where username = ‘qinshihuang’ and password = ‘123456’’ (length=116)

第二种使用sql注入语句时;当前端输入用户名是 ‘ or ‘1==1’#,密码随便字符时。

//假设前端页面传过来的用户名和密码是qinshihuang和123456,分别赋值给了两个变量。
$loginname = “‘ or ‘1==1’#”;
$loginpwd=”123456”;
返回了用户表所有值如下
iubang
123456
刘邦
xiangyu
123456
项羽
liuying
123456
刘盈
liugong
123456
刘恭
qinshihuang
123456
秦始皇
执行了如下语句,伪造了username=’’ or ‘1==1’的查询条件,#以后的语句不会执行。
C:\wamp\www\202201\login1.php:20:
object(PDOStatement)[2]
public ‘queryString’ => string ‘select username,password,chinesename from login

where username = ‘’ or ‘1==1’#’ and password = ‘123456’’ (length=117)

3、pdo预处理接入

  1. <?php
  2. header('content-type:text/html;charset:utf8');
  3. //假设前端页面传过来的用户名和密码是qinshihuang和123456,分别赋值给了两个变量。
  4. //$loginname = "' or '1==1'#";
  5. $loginname = "qinshihuang";
  6. $loginpwd="123456";
  7. //引用数据库连接文件
  8. require_once 'connectsql.php';
  9. //pdo预处理接入
  10. $sql = "select `username`,`password`,`chinesename` from `login` where `username` = ? and `password` = ?";
  11. //准备要执行的语句,并返回语句对象
  12. $stmt = $pdo->prepare($sql);
  13. //绑定参数到指定的变量名
  14. $stmt->bindparam(1,$loginname);
  15. $stmt->bindparam(2,$loginpwd);
  16. //执行一条预处理语句
  17. $stmt->execute();
  18. $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
  19. var_dump($res);
  20. ?>

输入用户名qinshihuang,密码123456,返回的值。

C:\wamp\www\202201\login2.php:27:
array (size=1)
0 =>
array (size=3)
‘username’ => string ‘qinshihuang’ (length=11)
‘password’ => string ‘123456’ (length=6)
‘chinesename’ => string ‘秦始皇’ (length=9)

当前端输入用户名是 ‘ or ‘1==1’#,密码随便字符时,返回为空。

C:\wamp\www\202201\login2.php:27:
array (size=0)
empty

更多相关文章

  1. 手动操作Android数据库
  2. PDO数据库的链接,PDO防mysql数据库预处理机制。以及使用pdo对数据
  3. PDO扩展连接mysql数据库,并实现用户登录时防sql注入的处理
  4. android之bundle传递数据--两个activities之间
  5. vue常用术语与常用指令
  6. Java使用JDBC连接数据库的详细步骤
  7. 流程控制语句、函数的参数与返回值、模板字符串与模板函数
  8. 流程控制、字面量与函数
  9. Android(安卓)用户界面【level 1】

随机推荐

  1. 《Android开发从零开始》——13.Table La
  2. 关于android中的内部存储与外部存储
  3. Android相对布局实现各种梅花效果
  4. Android 并发之Handler、Looper、Message
  5. 如何在Android上安装apk软件
  6. 5、frida进阶-Android逆向之旅---Hook神
  7. 常用知识篇 一 Selector state状态对应说
  8. 二十四、Android文件的读写
  9. Android开发之获取手机网络状态及网络是
  10. [Android] TextView只显示一行,多余显示