在没有准备好的语句/SQLite/C++ 的情况下防止 SQL 注入

2023-12-29

我希望得到一些有关此方案针对 SQL 注入攻击的安全性的反馈。

在前端,用户输入个人信息:姓名、地址、电话号码、电子邮件和一些自由格式文本。

后端是用C++从头开始编码的,没有框架支持,并集成了SQLite。

C++代码是这样的not使用 SQLite 准备好的语句(由于历史原因,现在采取任何措施都为时已晚)。相反,所有 SQL 语句都被构造为 printf 样式的格式字符串,大致如下:

#define STATEMENT_N "UPDATE members SET FirstName='%s', Surname='%s', DOB='%s', etc"

实际的语句是通过手工编码创建的sprintf (sqlPrintf) 语句仅处理%s, %c, and %d转换。然后创建最终的语句,如下所示:

sqlPrintf(query_buffer, STATEMENT_N, user_str_1, user_str_2, etc)

因此,换句话说(如果您不熟悉 C/sprintf),用户输入将被“打印”到%s, %c, and %d。唯一不明显的处理sqlPrintf是用户提供的单引号字符被转义(它们被加倍)。

这足以防止 SQL 注入攻击吗? “准备好的声明”实际上比上述方案更重要吗?


基本上,您在这里唯一需要担心的是单引号。查询中单引号内包含的任何内容都可以,但单独的单引号可以结束字符串,从而允许其余数据条目作为代码运行。如果sqlPrintf双引号,你应该没问题。阅读对您问题的评论,听起来这个系统可以抵御“';--”攻击。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在没有准备好的语句/SQLite/C++ 的情况下防止 SQL 注入 的相关文章

随机推荐

  • Docker 容器不会重新加载 Angular 应用程序

    我有一些问题ng serve在我运行的 docker 容器中docker compose Dockerfile FROM node 7 1 RUN mkdir p usr src app WORKDIR usr src app COPY p
  • 为什么谷歌脚本编辑器在函数中的 100 行后停止括号匹配,这会影响代码吗?

    在谷歌脚本编辑器中 函数 foo 超过100行 单击 或 均以红色突出显示 少于 100 行都是绿色的 它会影响代码还是只是让我们感到困惑 我自己尝试过 并在 Windows Vista 上使用 Chrome 重现了您的结果 括号匹配变为红
  • 模板类复制构造函数的部分特化

    我试图部分专门化一个非常基本的模板化数组类的复制构造函数 template
  • 使用 gearman 与 cron 进行调度?

    我注意到很多人在讨论 Gearman 及其调度功能 使其能够将工作分配到其他服务器上 但是 我还没有看到与本机 cronjobs 的比较 cron 和 Gearman 有什么区别 如果您进行纯粹的调度 则无需使用 Gearman Gearm
  • 如何在 gitlab-ci 中屏蔽 AWS_SECRET_ACCESS_KEY

    在我的 Gitlab CI 中 我需要将 docker 镜像推送到 AWS ECR 所以我需要AWS ACCESS KEY ID and AWS SECRET ACCESS KEY 在 Gitlab 中 当我进入 设置 gt CI CD g
  • 字段初始化

    下面两种字段初始化方式有什么区别吗 什么时候使用哪一个 第一种方式 public class Class1 private SomeClass someclass public Class1 someclass new SomeClass
  • 程序不包含适合 .Net MAUI Xunit 中入口点的静态“Main”方法

    我正进入 状态 程序不包含适合入口点的静态 Main 方法 在 NET MAUI 中运行 Xunit 项目时出错 public class UnitTest1 Fact public void Test1 重现 创建一个 MAUI 应用程序
  • JavaFX setOnEndOfMedia 在下一个 MediaPlayer 上

    I have List
  • 更改ASP.net core 3.0中的身份登录URL

    我正在尝试更改默认登录 URL Identity Account Login to Login 我查过类似的问题 他们提出了与此类似的解决方案 public void ConfigureServices IServiceCollection
  • 流式传输 Android 屏幕

    我正在尝试休憩Truiton 屏幕捕捉 https github com Truiton ScreenCapture例如 为了记录设备屏幕使用媒体投影 https developer android com reference androi
  • SAS - 使用另一列中的值动态创建列名称

    我有一列包含许多从 XML 解析器解析的标志 数据如下 USERKEYED Y VALMATCH N DEVICEVERIFIED N EXCEPTION N USERREGISTRD N ASSOCIATE Y EXTERNAL N GR
  • 谁能发布一个如何在 Tsung 中启用 SSL 的示例?

    我正在使用 Tsung 从另一台计算机对 CouchDB 服务器进行负载测试 并且需要建立安全连接 不幸的是 我无法在文档或在线中找到语法示例 任何帮助将不胜感激 在 tsung xml 中
  • 如何让移动浏览器(iOS、Android 中的 webkit)显示其软键盘

    我正在编写一个小型 Web 应用程序 它大量使用 canvas 元素来执行类似于 VNC 的操作 它特别针对 iOS 和 Android 的默认浏览器 我可以通过 AJAX 调用检测何时需要键盘输入 但我无法说服移动浏览器按需显示其软键盘
  • 如何在 Azure Key Vault 中存储公共证书(.cer 文件)

    如何在 azure keyvault 中上传或存储公钥 cer 文件 当我尝试上传适用于 pfx 文件的任何 cer 文件时 从 keyvault 面板中会出现错误 您应该考虑 Key Vault 是否适合您的场景 公钥 本质上 不是机密数
  • cscope支持历史列表记录吗?

    I use C要获取一个函数的调用者 那么我可以按一个数字跳转到一个调用者 但如果我想跳到另一个来电者 我必须按跳回 再按C 即可获取来电列表 cscope支持历史列表记录吗 如果您使用VIM 可以尝试快速修复 se cscopequick
  • Haskell 中的“约束”是什么意思

    我对 Haskell 很陌生 我正在尝试通过编写一些代码来理解该语言 我只熟悉 ghci 上非常简单的指令 head tail sum 等 非常简单 我试图创建的函数是为了求解任意维向量的毕达哥拉斯定理 这看起来像这样 平方根 a 2 b
  • 词法作用域是如何实现的? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 几年前 我开始为一种小型领域特定语言编写解释器 其中包括程序员定义的函数 起初 我使用简单的符号表堆栈
  • 词集中词的最大交集算法

    背后的故事 我正在使用创建语音控制应用程序x webkit speech这是令人惊讶的好 功能 而不是我的应用程序 但有时用户 我 会有点咕哝 如果单词的某些合理部分与某些合理命令的某些合理部分相匹配 那么接受该命令会很好 所以我寻找名为
  • Numpy 提取子矩阵

    我是新来的numpy我很难理解如何从np array具有定义的列和行的子矩阵 Y np arange 16 reshape 4 4 如果我想提取列 行 0 和 3 我应该 0 3 12 15 我尝试了所有的重塑功能 但不知道如何做到这一点
  • 在没有准备好的语句/SQLite/C++ 的情况下防止 SQL 注入

    我希望得到一些有关此方案针对 SQL 注入攻击的安全性的反馈 在前端 用户输入个人信息 姓名 地址 电话号码 电子邮件和一些自由格式文本 后端是用C 从头开始编码的 没有框架支持 并集成了SQLite C 代码是这样的not使用 SQLit