PHP - Praneeth Madush Advanced-PHP-登录系统脚本安全吗?
PHP - Is Praneeth Madush Advanced-PHP-Login-System script safe?
我用了Praneeth Madush Advanced-PHP-Login-System script in my projects. This script based on user class. This class contains four functions. This functions seams don't use MySQL Prepared Statements。此脚本似乎存在安全风险。例如这是插入函数:
public function insert($data){
if(!empty($data) && 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注入攻击?
是的,它很容易受到 SQL 注入,如果用户可以在 $data 中输入任何内容并且它没有被修改。
例子:
//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'
在这里,我只是用您数据库的用户密码替换了 column2 的值,并且我会在您网站的用户帐户上很好地打印出来。但这只是一回事,能输入什么都能输出。
对于错误 运行 问题,我们可能会帮助您解决错误。
我用了Praneeth Madush Advanced-PHP-Login-System script in my projects. This script based on user class. This class contains four functions. This functions seams don't use MySQL Prepared Statements。此脚本似乎存在安全风险。例如这是插入函数:
public function insert($data){
if(!empty($data) && 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注入攻击?
是的,它很容易受到 SQL 注入,如果用户可以在 $data 中输入任何内容并且它没有被修改。 例子:
//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'
在这里,我只是用您数据库的用户密码替换了 column2 的值,并且我会在您网站的用户帐户上很好地打印出来。但这只是一回事,能输入什么都能输出。
对于错误 运行 问题,我们可能会帮助您解决错误。