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();
相关推荐
m0_7482405410 小时前
数据库操作与数据管理——Rust 与 SQLite 的集成
数据库·rust·sqlite
九亿少女无法触及的梦ى10 小时前
uni-app集成sqlite
sqlite·uni-app
Galeoto19 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
AC使者1 天前
介绍 TensorFlow 的基本概念和使用场景。
开发语言·自然语言处理·sqlite·github
begei1 天前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
信阳农夫2 天前
python 3.6.8支持的Django版本是多少?
python·django·sqlite
LCY1332 天前
websocket与django
websocket·django·sqlite
一个处女座的程序猿O(∩_∩)O3 天前
Django+Vue3全栈开发实战:从零搭建博客系统
vue.js·python·django·sqlite
努力的CV战士3 天前
数据库-SQLite
c语言·开发语言·sqlite
神仙别闹3 天前
基于Python+Sqlite实现的选课系统
jvm·python·sqlite