当前位置:Gxlcms > 数据库问题 > 18)添加引号转移函数,防止SQL注入

18)添加引号转移函数,防止SQL注入

时间:2021-07-01 10:21:17 帮助过:5人阅读

<?php 2 3 /** 4 * Created by PhpStorm. 5 * User: Interact 6 * Date: 2017/8/19 7 * Time: 19:32 8 */ 9 class MysqlDB { 10 private static $link; 11 public $host; 12 public $port; 13 public $username; 14 public $passsword; 15 public $charset; 16 //数据库连接对象 17 public $dbname;//防止未接破坏这个连接对象,这个link就是MysqlDB 对象 18 private $resourc; 19 20 /** 21 * @param $config,你的配置数组 22 * @return 获取数据库连接对象$link,同时作为返回值 23 */ 24 private function __construct($config) { 25 $this->host = isset($config[host]) ? $config[host] : localhost; 26 $this->port = isset($config[port]) ? $config[port] : 3306; 27 $this->username = isset($config[username]) ? $config[username] : root; 28 $this->password = isset($config[password]) ? $config[password] : ‘‘; 29 $this->charset = isset($config[charset]) ? $config[charset] : utf8; 30 $this->dbname = isset($config[dbname]) ? $config[dbname] : ‘‘; 31 //连接数据库 32 $this->connect(); 33 //设定连接编码 34 //$this->setCharset($this->charset);//这个执行不了,可能新的php有了更改 35 //选定数据库 36 $this->selectDb($this->dbname); 37 } 38 39 //构造函数,禁止new,这样可以用工厂函数来创造类 40 public function connect() { 41 $this->resourc = mysqli_connect("$this->host", 42 "$this->username", "$this->password") or die("连接数据库失败!"); 43 } 44 45 //禁止克隆 46 public function selectDb($dbname) { 47 mysqli_select_db($this->resourc, $dbname); 48 } 49 50 public static function getInstance($config) { 51 if (!isset(self::$link)) { 52 self::$link = new self($config); 53 //或者是 self::$link=$this->__construct($config); 54 } 55 56 return self::$link; 57 } 58 59 /** 60 * 功能:执行select语句,返回2维数组 61 * 参数:$sql 字符串类型 select语句 62 */ 63 public function getAll($sql) { 64 $result = $this->query($sql); 65 $arr = array(); //空数组 66 while ($rec = mysqli_fetch_assoc($result)) { 67 $arr[] = $rec;//这样就形成二维数组 68 } 69 70 return $arr; 71 } 72 73 /** 74 * 功能:执行最基本(任何)sql语句 75 * 返回:如果失败直接结束,如果成功,返回执行结果 76 */ 77 public function query($sql) { 78 if (!$result = mysqli_query($this->resourc, $sql)) { 79 echo("<br />执行失败。"); 80 echo "<br />失败的sql语句为:".$sql; 81 echo "<br />出错信息为:".mysqli_error($this->resourc); 82 echo "<br />错误代号为:".mysqli_errno($this->resourc); 83 die(); 84 } 85 86 return $result; 87 } 88 89 public function getRow($sql) { 90 $result = $this->query($sql); 91 //$rec = array(); 92 if ($rec2 = mysqli_fetch_assoc($result)) {//返回下标为字段名的数组 93 //如果fetch出来有数据(也就是取得了一行数据),结果自然是数组 94 return $rec2; 95 } 96 97 return false; 98 } 99 100 //返回一行数据(作为一维数组) 101 102 public function getOne($sql) { 103 $result = $this->query($sql); 104 $rec = mysqli_fetch_row($result);//返回下标为数字的数组,且下标一定是0,1,2, 3..... 105 //如果没有数据,返回false 106 if ($result === false) { 107 return false; 108 } 109 110 return $rec[0]; //该数组的第一项。 111 112 } 113 //返回一个数据(select语句的第一行第一列) 114 //比如常见的:select count(*) as c from XXX where ... 115 116 private function __clone() { 117 } 118 /** 119 * 转义用户数据,防止SQL注入 120 * @param $data string 带转换的字符串 121 * @return string 122 * 转换后的字符串 123 */ 124 public function escapeString($data){ 125 return mysqli_real_escape_string(self::$link,$data); 126 } 127 }

 

 

    AdminModel.class.php

      技术分享

 

 1 <?php
 2     /**
 3      * Created by PhpStorm.
 4      * User: Interact
 5      * Date: 2017/8/21
 6      * Time: 8:39
 7      */
 8 class AdminModel extends Model{
 9     /**
10      * @param $admin_name
11      * @param $admin_pass
12      *后台登录验证函数
13      * @return bool
14      */
15     public function check($admin_name, $admin_pass) {
16         $admin_name=$this->_dao->escapeString($admin_name);
17         $admin_pass=$this->_dao->escapeString($admin_pass);
18         $sql = "SELECT * FROM `admin` WHERE admin_name=‘$admin_name‘ and admin_pass=md5(‘$admin_pass‘)";
19         $row = $this->_dao->getRow($sql);
20         
21         return (bool) $row;
22     }
23 }

 

 

  AdminC.controller.class.php

    技术分享

    

 1 <?php
 2     /**
 3      * Created by PhpStorm.
 4      * User: Interact
 5      * Date: 2017/8/20
 6      * Time: 14:22
 7      */
 8 class AdminC extends  Controller{
 9    
10     
11     public  function  login(){
12 //        require
13         require APPLICATION_PATH.back/view/login.html;
14     }
15     /**
16      * 验证管理员是否合法
17      */
18     public function check() {
19 //        echo "MC天佑MC天佑MC天佑";
20 //        echo $_REQUEST[‘username‘];
21         // 获得表单数据
22         /*echo $_REQUEST[‘username‘];
23         echo ‘\n‘;
24         echo $_REQUEST[‘password‘];*/
25         $admin_name = $_REQUEST[username];
26         $admin_pass = $_REQUEST[password];
27         $admin_name=addslashes($admin_name);
28         $admin_pass=addslashes($admin_pass);
29        
30         
31         
32         //从数据库中验证管理员信息是否存在合法
33         $m_admin = Factory::M(AdminModel);
34         if ($m_admin->check($admin_name, $admin_pass)) {
35 //            //验证通过,合法
36 //            echo ‘合法,直接跳转到后台首页‘;
37            session_start();
38 //            $_SESSION[‘is_login‘]=‘yes‘;
39             new SessionDB();
40             $this->_jump(index.php?p=back&c=BACkC&a=index);
41         } else {
42             // 非法
43 //            echo ‘非法, 提示,跳转到后台登陆页面index.php?p=back&c=Admin&a=login‘;
44             $this->_jump(index.php?p=back&c=AdminC&a=login,用户名或密码错误);
45         }
46 //
47     }
48 }

 

 

结果展示:

    

18)添加引号转移函数,防止SQL注入

标签:res   name   span   执行   param   ldb   函数   nec   ext   

人气教程排行