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();
相关推荐
张人玉1 天前
基于 Vue3 + ECharts + Express + SQLite 的智慧交通数据可视化系统——郑州交通数据可视化大屏
sqlite·echarts·express
2601_964273692 天前
药流最佳时间是多少天左右?窗口期风险区分与术后修护科普指南
sqlite
Quincy_Freak2 天前
SQLiteGo:信创离线环境下 SQLite 数据处理实践
数据库·sqlite·sqlitego
Quincy_Freak3 天前
SQLiteGo V2.3 版本更新说明
大数据·数据库·sqlite·数据库管理·大数据分析·sqlitego
躺不平的理查德3 天前
SQLite C API 备忘录
c语言·数据库·sqlite
张人玉4 天前
基于 Vue2 + ECharts + Express + SQLite 的南阳市专题数据可视化系统
sqlite·echarts·express
Xiangchu_9 天前
合肥新能源汽车崛起,本地硅胶件谁来供
python·算法·eclipse·sqlite·汽车·制造
Quincy_Freak9 天前
Python 轻量化数据存储实践:国产化环境下SQLite高效管理方案
数据库·sqlite·数据库管理·大数据分析·sqlitego
强健的石头13 天前
django文件对象是什么?
数据库·django·sqlite
Quincy_Freak14 天前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64