Sqlite插入单引号和双引号,防止sql注入

1. 方法1

  • sqlite3_mprintf替换sprintf,
  • '%q'替换'%s'.

1.1. 举例

修改前代码

c 复制代码
	//修改前, hello'123写入失败
	char sql[1000]
    char* sql = sprintf("UPDATE table SET name = '%s' WHERE name_id = %d",
                "hello'123", 1);

    rc = sqlite3_exec(db, sql, NULL, NULL, &err_msg);
    if (rc != SQLITE_OK )
	{
        fprintf(stderr, "Failed to updata. \n");
        fprintf(stderr, "SQL error: %s\n", err_msg);

        sqlite3_free(err_msg);
        sqlite3_close(db);

        return -1;
    }
    
    /* 关闭 */
    sqlite3_close(db);
	return 0;

修改后代码

c 复制代码
	//修改后,hello'123写入成功
    char* sql = sqlite3_mprintf("UPDATE table SET name = '%q' WHERE name_id = %d",
                "hello'123", 1);

    rc = sqlite3_exec(db, sql, NULL, NULL, &err_msg);
    if (rc != SQLITE_OK )
	{
        fprintf(stderr, "Failed to updata. \n");
        fprintf(stderr, "SQL error: %s\n", err_msg);

        sqlite3_free(err_msg);
        sqlite3_close(db);
        sqlite3_free(sql);  //别忘了释放

        return -1;
    }
    
    /* 关闭 */
    sqlite3_close(db);
    sqlite3_free(sql);	//别忘了释放
	return 0;

2. 方法2

使用sqlite3_prepare_v2prepare方式。

c 复制代码
sql_query.prepare("INSERT INTO tables VALUES(?, ?);");
sql_query.addBindValue("hello'123");
sql_query.addBindValue("hello");
sql_query.exec();
相关推荐
雨奔17 小时前
Django 学习路线图
学习·django·sqlite
白小筠3 天前
创建Django项目
数据库·django·sqlite
滴_咕噜咕噜3 天前
【MFC】sqlite3数据库类导入MFC项目调用
sqlite·mfc
PieroPc3 天前
用Python Streamlit Sqlite3 写一个简单商品管理系统
数据库·python·sqlite·streamlit
静听山水4 天前
SQLite
数据库·sqlite
6极地诈唬4 天前
【sqlite】WAL初探
数据库·sqlite
PieroPc4 天前
用Python Streamlit sqlite3 写一个简单博客
数据库·python·sqlite
码界奇点5 天前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
赋能大师兄5 天前
SQLITE数据库完成数据增删改查
数据库·sqlite
2401_841495645 天前
【数据库开发】个人信息管理的数据库创建以及查询方法(最简单)
数据库·sql·mysql·sqlite·数据库开发·个人数据库·管理个人信息