php 中防注入的函数,怎么写,或者思路是啥

解决方案 »

  1.   

    如果没有get_magic_quotes_gpc()
    {
     addslashes()//$_GET, $_POST, $_COOKIE, $_REQUEST  .每一个变量,数组要遍历
    }mysql_escape_string//这两个也可以转义,让sql语句安全mysql_real_escape_string
      

  2.   

    一般防注入的方法,是把所有的用户输入强制转成SQL语句中的字符串,也就是在用户的输入前后加''。
    PHP已经有现成的防注入函数,比如:对应mysqli->query的mysqli->bind_param
      

  3.   

    那如果把get_magic_quotes_gpc打开,既不会存在注入了吗?
      

  4.   

    那如果把get_magic_quotes_gpc打开,既不会存在注入了吗?================================
    为了代码健壮,程序上还是要判断,如果没打开,则代码处理一下。函数名,最后三个字应该就是GET POST COOKIE的首字母复制一个手册上的例子。
    <?php
    echo get_magic_quotes_gpc();         // 1
    echo $_POST['lastname'];             // O\'reilly
    echo addslashes($_POST['lastname']); // O\\\'reillyif (!get_magic_quotes_gpc()) {
        $lastname = addslashes($_POST['lastname']);
    } else {
        $lastname = $_POST['lastname'];
    }echo $lastname; // O\'reilly
    $sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
    ?> 如果自己写,写成递归形式比较好。要对每一个变量都处理一遍
      

  5.   

    addslashes  是转义一下那与这种手工处理,有什么优缺点呢 
      

  6.   


    +++++sql语句里也全部:where id='$id' and name='$name'就始终跑不出''的范围了
      

  7.   

    原理就是通过增加sql语句的条件来实现的,比如一条查询语句,它的条件是变量$a,而这个变量$a又是通过用户给的(例如表单传值、url传值),这样就实现了sql的注入,如下:$uid = $_POST['uid'];
    $sql = 'select username, password, email from table_users where uid = '.$uid;如果POST的uid是一个整数1(假如),那么上面的sql语句如下:$sql = 'select username, password, email from table_users where uid = 1';如果POST的uid是一个带有注入含义的字符串(uid类型如果是int那么直接就形成了注入)或者是i'.' or 1(假如),那么上面的sql语句如下:$sql = 'select username, password, email from table_users where uid = 1'.' or 1';
    为了防止sql注入,你需要将特殊字符进行转义(用\转义,请用相关php相关方法,如addslashes)以上是我个人见解
      

  8.   


    //替换字符串的特殊符号或SQL关键字
    function dowith_sql($str)
    {
    $str = str_replace("and","",$str);
    $str = str_replace("execute","",$str);
    $str = str_replace("update","",$str);
    $str = str_replace("count","",$str);
    $str = str_replace("chr","",$str);
    $str = str_replace("mid","",$str);
    $str = str_replace("master","",$str);
    $str = str_replace("truncate","",$str);
        $str = str_replace("char","",$str);
        $str = str_replace("declare","",$str);
       $str = str_replace("select","",$str);
       $str = str_replace("create","",$str);
       $str = str_replace("delete","",$str);
        $str = str_replace("insert","",$str);
        $str = str_replace("'","",$str);
        $str = str_replace('"',"",$str);
        $str = str_replace(" ","",$str);
        $str = str_replace("or","",$str);
        $str = str_replace("=","",$str);
        $str = str_replace("%20","",$str);
        return $str;
    }