运行效果如下:

1、正常注册一个账户 xiaobai  密码 xiaobai ,注册成功

2、使用账号 xiaobai 密码 xiaobai ,确认可以登录

3、使用账号 xiaobai 密码 ' OR '1'='1  确认可以通过SQL注入的方式登录

4、输入任意账号(未注册用户) 密码 ' OR '1'='1 也可以登录。

解决方法:

1、使用bindValue 可以防止SQL注入。

问题代码如下: 

    QString sql=QString("select * from user where username='%1' and password='%2'")
            .arg(username).arg(password);

    //创建执行语句对象
    QSqlQuery query(sql);

    //判断执行结果
    if(!query.next())
    {
        qDebug()<<"Login error";
        QMessageBox::information(this,"登录认证","登录失败,账户或者密码错误");

    }
    else
    {
        qDebug()<<"Login success";
        QMessageBox::information(this,"登录认证","登录成功");
        QWidget *w = new QWidget;
        w->show();
        this->close();
    }

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐