2016-03-19 1 views
0

Я считаю, что это утверждение уязвимо для инъекций, но я не уверен.Является ли мой запрос на инъекцию 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; 
} 

ответ

1

Это то, что docs on addslashes говорят:

Пожалуйста, обратите внимание, что использование addslashes() для параметра базы данных экранирования может быть причиной проблем безопасности на большинство баз данных.

В этой же статье есть:

Чтобы избежать параметров базы данных, СУБД определенную функцию побега (например mysqli_real_escape_string() для MySQL или pg_escape_literal(), pg_escape_string() для PostgreSQL) следует использовать по соображениям безопасности.

Однако наилучшим способом использования параметров в операторах SQL является использование prepared statements. Там значения параметров никогда не вводятся в инструкцию SQL, и поэтому не может быть и вредоносной инъекции. Вместо этого механизм базы данных напрямую использует значения параметров (и как литералы) для выполнения уже скомпилированного запроса.

Просьба ознакомиться с How can I prevent SQL injection in PHP: у нее есть много информации об этой теме.

+0

Спасибо, очень ценю ответ. –

Смежные вопросы