我的MYSQL注入语句容易受到攻击吗?

时间:2016-03-19 17:50:39

标签: php mysql

我认为这种说法易受注射,但我不确定。

在这方面有任何帮助吗?

感谢。

function CheckUserLogin($userName,$password)
{
    $sql="SELECT user_id 
         FROM users 
         WHERE user_name='".addslashes($userName)."' AND password ='".addslashes($password)."'";    
    $this->query($sql);
    if($this->movenext()>0)
    {
        return $this->col['user_id'];   
    }
    else 
    {
        return false;
    }
}

查询功能就是这样

function query($_query){
    list($usec, $sec) = explode(" ",microtime());
    $time_start  = ((float)$usec + (float)$sec);


    $this->query = $_query;
    $this->result = @mysql_query($_query, $this->link_id) or die("<b>error in sql query</b><br><pre>".$_query."</pre>.mysql error : <b>".mysql_error($this->link_id)."</b><p>");

    list($usec, $sec) = explode(" ",microtime());
    $time_end  =  ((float)$usec + (float)$sec);
    $time = $time_end - $time_start;
}

2 个答案:

答案 0 :(得分:1)

这就是docs on addslashes所说的:

  

请注意,使用addslashes()进行数据库参数转义可能会导致大多数数据库出现安全问题。

同一篇文章:

  

为了逃避数据库参数,出于安全原因,应使用DBMS特定的转义函数(例如MySQL的mysqli_real_escape_string()或PostgreSQL的pg_escape_literal()pg_escape_string()

但是,在SQL语句中使用参数的最佳方法是使用prepared statements。在那里,参数值永远不会注入SQL语句,因此也不会有恶意注入。相反,数据库引擎直接使用参数值(以及作为文字)来执行已编译的查询。

请阅读How can I prevent SQL injection in PHP:它有很多关于此主题的信息。

答案 1 :(得分:0)