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();
相关推荐
静听山水12 小时前
SQLite
数据库·sqlite
6极地诈唬15 小时前
【sqlite】WAL初探
数据库·sqlite
PieroPc15 小时前
用Python Streamlit sqlite3 写一个简单博客
数据库·python·sqlite
码界奇点1 天前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
赋能大师兄1 天前
SQLITE数据库完成数据增删改查
数据库·sqlite
2401_841495641 天前
【数据库开发】个人信息管理的数据库创建以及查询方法(最简单)
数据库·sql·mysql·sqlite·数据库开发·个人数据库·管理个人信息
主宰者2 天前
【C#】.NET Framework 4.8环境下使用Sqlite的问题总结
sqlite·c#·.net
Quz2 天前
QML TableView:基于SQLite实现增删改查
数据库·qt·sqlite
小宁爱Python2 天前
Django Web 开发系列(二):视图进阶、快捷函数与请求响应处理
前端·django·sqlite
6极地诈唬3 天前
【sqlite】xxx.db-journal是什么?
数据库·sqlite