首页 > 解决方案 > PHP - Praneeth Madush Advanced-PHP-Login-System 脚本安全吗?

问题描述

我在我的项目中使用了 Praneeth Madush Advanced-PHP-Login-System 脚本。此脚本基于用户类。这个类包含四个函数。此函数接缝不使用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注入攻击吗?

标签: phpauthenticationsystemcode-injection

解决方案


是的,如果用户可以在 $data 中输入任何内容并且它没有被修改,那么它很容易受到 SQL 注入的攻击。例子:

//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 值,我会在您网站的用户帐户上很好地打印出来。但这只是一件事,如果可以输入任何内容,则一切都可以出来。

对于错误,只需运行它,我们可能会帮助您解决错误。


推荐阅读