#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 паролем пользователя вашей базы данных, и я хотел бы, чтобы это было красиво напечатано в моей учетной записи пользователя вашего сайта. Но это только одно, если что-то можно ввести, все может выйти наружу.
В случае ошибок просто запустите эту штуку, и мы сможем помочь вам с ошибками.