Blogger Information
Blog 43
fans 0
comment 0
visits 30723
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO预处理与会话控制
橙絮圆
Original
693 people have browsed it

PDO预处理与会话控制

作业内容:1. 请实例演绎pdo在用户登录环节是怎么防sql注入的? 2. 写一个小实战, 实现预处理与会话跟踪?


  1. 请实例演绎pdo在用户登录环节是怎么防sql注入的?
    黑客输入’ or 1=1 # 密码任意查询结果
    黑客
    防注入效果图
    防注入

登录函数代码

  1. function login($username,$password)
  2. {
  3. global $pdo;
  4. $flag=false;
  5. if( !empty($username) && !empty($password))
  6. {
  7. //可以把它看作是想要运行的SQL的一种编译过的模板
  8. //使用问号参数占位符来构成预处理语句
  9. $sql="SELECT `uname`,`pwd` FROM `user` WHERE `uname`=?
  10. AND `pwd`=?";
  11. //PDO::prepare-准备要执行的语句,并返回语句对象
  12. $stmt=$pdo->prepare($sql);
  13. //绑定一个PHP变量到用作预处理的SQL语句中的对应问号占位符
  14. // $stmt->bindParam(1,$username,PDO::PARAM_STR);
  15. //$stmt->bindParam(2,$password,PDO::PARAM_STR);
  16. //执行一条预处理语句 成功时返回true,或者在失败时返回false
  17. $stmt->execute([$username,$password]);
  18. $res = $stmt->fetch();
  19. if($res)
  20. {
  21. $_SESSION['uname'] = $res['uname'];
  22. $flag=true;
  23. }
  24. // foreach($stmt as $v)
  25. // {
  26. // print_r($v);
  27. // }
  28. // die;
  29. return $flag;
  30. }
  31. }
  1. 写一个小实战, 实现预处理与会话跟踪?
  1. <?php
  2. //公共模型文件
  3. session_start();//开启seesion
  4. require '1-connect.php';
  5. /**
  6. * 检测用户注册用户名是否被占用
  7. * param:用户名
  8. * return : 被占用返回true未被占用返回false
  9. */
  10. function checkUname($username)
  11. {
  12. global $pdo;
  13. $isOccupied=false;//默认数据库不存在同名用户名
  14. $sql="SELECT `uname` FROM `user` WHERE `uname`='{$username}'";
  15. $res=$pdo->query($sql)->fetch();
  16. //已存在同名昵称
  17. if($res)
  18. {
  19. $isOccupied=true;
  20. }
  21. return $isOccupied;
  22. }
  23. /**
  24. *
  25. * param:用户名注册 用户名 密码 性别 创建时间
  26. * return : 注册成功返回true 失败返回false
  27. */
  28. function insertData($username, $password, $gender, $create_time)
  29. {
  30. global $pdo;
  31. $flag=false;
  32. if( !empty($username) && !empty($password) && !empty($gender))
  33. {
  34. $sql="INSERT INTO `user` SET `uname`='{$username}',`pwd`='{$password}',
  35. `gender`={$gender},`create_time`={$create_time};";
  36. $res=$pdo->exec($sql);
  37. if($res)
  38. {
  39. $flag=true;
  40. }
  41. }
  42. return $flag;
  43. }
  44. /**
  45. * param:用户登录 用户名 密码
  46. * return:登录成功返回true 失败返回false
  47. */
  48. function login($username,$password)
  49. {
  50. global $pdo;
  51. $flag=false;
  52. if( !empty($username) && !empty($password))
  53. {
  54. //可以把它看作是想要运行的SQL的一种编译过的模板
  55. //使用问号参数占位符来构成预处理语句
  56. $sql="SELECT `uname`,`pwd` FROM `user` WHERE `uname`=?
  57. AND `pwd`=?";
  58. //PDO::prepare-准备要执行的语句,并返回语句对象
  59. $stmt=$pdo->prepare($sql);
  60. //绑定一个PHP变量到用作预处理的SQL语句中的对应问号占位符
  61. // $stmt->bindParam(1,$username,PDO::PARAM_STR);
  62. //$stmt->bindParam(2,$password,PDO::PARAM_STR);
  63. //执行一条预处理语句 成功时返回true,或者在失败时返回false
  64. $stmt->execute([$username,$password]);
  65. $res = $stmt->fetch();
  66. if($res)
  67. {
  68. $_SESSION['uname'] = $res['uname'];
  69. $flag=true;
  70. }
  71. // foreach($stmt as $v)
  72. // {
  73. // print_r($v);
  74. // }
  75. // die;
  76. return $flag;
  77. }
  78. }
  1. <?session_start()?>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="viewport" content="width=欢迎, initial-scale=1.0">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. 欢迎<?=$_SESSION['uname']?>,来到php中文网后台
  12. </body>
  13. </html>

效果将admin用户名带过去
admin

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post