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();
相关推荐
冷雨夜中漫步14 小时前
SQLite 深度解析:在 Java/Spring 中的使用与H2、Derby对比
java·spring·sqlite
En^_^Joy15 小时前
Django开发:基本入门指南
python·django·sqlite
IT策士3 天前
Django 从 0 到 1 打造完整电商平台:使用 Django 消息框架与用户权限初步
数据库·django·sqlite
IT策士4 天前
Django 从 0 到 1 打造完整电商平台:登录与登出功能实现
数据库·django·sqlite
HwJack204 天前
Flask+SQLite简易后端数据存储实现原理
jvm·sqlite·flask
小杍随笔4 天前
【redb vs SQLite (rusqlite) 技术选型对比】
数据库·sqlite
o丁二黄o4 天前
长上下文工程实战:用Gemini镜像站构建跨文档关联分析与自动报告系统
sqlite
m0_617493944 天前
PySide6 数据库操作深度实测:从 SQLite 连接到增删改查避坑指南
jvm·数据库·sqlite
csdn小瓯4 天前
PostgreSQL迁移实战:从SQLite到生产级数据库的平滑演进
数据库·postgresql·sqlite
IT策士5 天前
Django 从 0 到 1 打造完整电商平台:Admin 后台管理与数据初始化
数据库·django·sqlite