PHP — Безопасен ли скрипт Praneeth Madush Advanced-PHP-Входа в систему?

#php #authentication #system #code-injection

Вопрос:

Я использовал скрипт Praneeth Madush Advanced-PHP-Login-System в своих проектах. Этот сценарий основан на классе пользователя. Этот класс содержит четыре функции. Эти функции не используют подготовленные операторы MySQL. Этот сценарий, по-видимому, представляет угрозу безопасности. Например, это функция вставки:

 public function insert($data){
    if(!empty($data) amp;amp; is_array($data)){
        $columns = '';
        $values  = '';
        $i = 0;
        if(!array_key_exists('created',$data)){
            $data['created'] = date("Y-m-d H:i:s");
        }
        if(!array_key_exists('modified',$data)){
            $data['modified'] = date("Y-m-d H:i:s");
        }
        foreach($data as $key=>$val){
            $pre = ($i > 0)?', ':'';
            $columns .= $pre.$key;
            $values  .= $pre."'".$val."'";
            $i  ;
        }
        $query = "INSERT INTO ".$this->userTbl." (".$columns.") VALUES (".$values.")";
        $insert = $this->db->query($query);
        return $insert?$this->db->insert_id:false;
    }else{
        return false;
    }
}
 

Мой вопрос: безопасен ли этот скрипт? Какие ошибки есть в этом скрипте?
Устойчив ли он к атаке SQL-инъекций?

Комментарии:

1. Это не так, так как он напрямую вводит параметры. Я бы предложил использовать фреймворк.

2. Да, я думаю, что этот сценарий игнорировал стандарты OWASP.

Ответ №1:

Да, он уязвим для SQL-инъекций, если пользователь может ввести что-либо в $data и это не будет изменено. exemple:

 //i guess 2 values :
$val[column1]="x',select password from mysql.user where user=’root’);--";
$val[column2]='doesntmatter';

//then:
$values="'x',select password from mysql.user where user=’root’);--,'doesntmatter'";

//then your query will be :
$query = "INSERT INTO  ('column1','column2') `usertable` VALUES ('x',select password from mysql.user where user=’root’);--,'doesntmatter'
 

Здесь я только что заменил значение столбца 2 паролем пользователя вашей базы данных, и я хотел бы, чтобы это было красиво напечатано в моей учетной записи пользователя вашего сайта. Но это только одно, если что-то можно ввести, все может выйти наружу.

В случае ошибок просто запустите эту штуку, и мы сможем помочь вам с ошибками.