zoukankan      html  css  js  c++  java
  • php常用代码

    1.PHP 函数:阻止 SQL 注入 

    SQL 注入或者 SQLi 常见的攻击网站的手段,使用下面的代码可以帮助你防止

    /**
     * 返回经addslashes处理过的字符串或数组
     * @param $string 需要处理的字符串或数组
     * @return mixed
     */
    function new_addslashes($string){
        if(!is_array($string)) return addslashes($string);
        foreach($string as $key => $val) $string[$key] = new_addslashes($val);
        return $string;
    }
    
    /**
     * 返回经stripslashes处理过的字符串或数组
     * @param $string 需要处理的字符串或数组
     * @return mixed
     */
    function new_stripslashes($string) {
        if(!is_array($string)) return stripslashes($string);
        foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
        return $string;
    }
    
    /**
     * 返回经htmlspecialchars处理过的字符串或数组
     * @param $obj 需要处理的字符串或数组
     * @return mixed
     */
    function new_html_special_chars($string) {
        $encoding = 'utf-8';
        if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
        if(!is_array($string)) return htmlspecialchars($string,ENT_QUOTES,$encoding);
        foreach($string as $key => $val) $string[$key] = new_html_special_chars($val);
        return $string;
    }

    对用户输入的数据做转义:

    if (!get_magic_quotes_gpc()) {          
    $search=new_addslashes($search);

    输出做stripslashes,htmlspecialchars是在输出HTML时防御XSS攻击的,区别于上面说的防御SQL注入

    2.用php实例进行mysqli数据库连接

    使用方法一:使用传统的面向过程的方法 
    php代码如下:

    <?php 
    $connect = mysqli_connect('localhost','root','','volunteer') or die('Unale to connect'); 
    $sql = "select * from vol_msg"; 
    $result = mysqli_query($connect,$sql); 
    while($row = mysqli_fetch_row($result)){ 
    echo $row[0]; 
    } 
    ?> 

    使用方法二:使用面向对象的方法调用接口(推荐使用) 
    看php代码如下: 

    <?php 
    //创建对象并打开连接,最后一个参数是选择的数据库名称 
    $db= new mysqli('localhost','root','','volunteer'); 
    //检查连接是否成功 
    if (mysqli_connect_errno()){ 
    //注意mysqli_connect_error()新特性 
    die('Unable to connect!'). mysqli_connect_error(); 
    } 
    $sql = "select * from vol_msg"; 
    //执行sql语句,完全面向对象的 
    $result = $db->query($sql);
    $num_results=$result->num_rows;
    echo '共有'.$num_results.'条记录'
    while($row = $result->fetch_array()){ echo $row[0];
    }

    $result->free();
    $db->close();
    ?>

    以上两个php实例运行的结果完全相同,可以清楚的看到使用mysqli类对象构建数据库连接的优势! 
    插入和修改记录我就不用讲了,只要更改一下sql语句就行!

    防御SQL注入(输入数据库):
    PDO bindParam 或 mysqli_stmt_bind_param: 避免SQL注入.
    addslashes: 用反斜杠转义所有的单引号,双引号,反斜杠和NUL's,一定程度上避免SQL注入.
    mysqli_real_escape_string: 转义SQL语句中的特殊字符.
    有了bind_param,就不需要使用addslashes,mysqli_real_escape_string,magic_quotes_gpc这些功能了.
    比如:

    PDO MySQL:
    //方法1(问号占位符)
    $stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
    $stmt->execute(array($title,$content,$id)); //所有值视作PDO::PARAM_STR处理
    
    //方法2(命名占位符)
    $stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');
    $stmt->execute(array(':title' => $title,':content' => $content,':id' => $id)); //所有值视作PDO::PARAM_STR处理
    
    //方法3
    $stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
    $stmt->bindParam(1, $title,   PDO::PARAM_STR);
    $stmt->bindParam(2, $content, PDO::PARAM_STR);
    $stmt->bindParam(3, $id,      PDO::PARAM_INT);
    $stmt->execute();
    
    //方法4
    $stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');
    $stmt->bindParam(':title',   $title,   PDO::PARAM_STR);
    $stmt->bindParam(':content', $content, PDO::PARAM_STR);
    $stmt->bindParam(':id',      $id,      PDO::PARAM_INT);
    $stmt->execute();
    
    MySQLi:
    //MySQLi只需执行一次bind_param,要比PDO简洁一些,MySQLi不支持命名占位符.
    $stmt->bind_param('ssi', $title, $content, $id);
  • 相关阅读:
    第一个Django demo
    内建函数
    Git积累
    区间dp
    【Spring】Spring AOP详解(转载)
    【git】git 常用命令(含删除文件)
    【idea】idea如何在maven工程中引入jar包
    【Java】Scanner类nextInt后使用nextLine无法读取输入
    【Java_Eclipse】Eclipse插件如何卸载?
    【MySQL】MySQL5.7等以上版本在Windows上的配置
  • 原文地址:https://www.cnblogs.com/feng18/p/6523515.html
Copyright © 2011-2022 走看看